Ign*_*ioC 13 error-handling nserror ios swift
现在使用Swift标记了一些函数throws,这迫使开发人员在do - try catch块内调用函数.但是开发人员如何知道该函数抛出的不同异常列表?
作为参考,这是一行Java代码:
static void employeeAge(int age) throws MyExceptionA,MyExceptionB
Run Code Online (Sandbox Code Playgroud)
很明显,例外是2 MyExceptionA,MyExceptionB并且开发人员可以决定采取不同的行动取决于错误.
我们可以在Swift上实现同样的目标吗?
当 Swift 文档提到一个 function 时throws,他们的意思是它抛出一个异常ErrorType(在 Cocoa API 中通常是一个异常NSError),而不是异常。
考虑\'sdo-try-catch的以下流程:NSFileManagercreateDirectoryAtPath
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]\n\ndo {\n try NSFileManager.defaultManager().createDirectoryAtPath(documentsPath, withIntermediateDirectories: false, attributes: nil)\n} catch { \n // \'error\' variable automatically populated\n print(error)\n print(error.dynamicType)\n}\nRun Code Online (Sandbox Code Playgroud)\n\ncreateDirectoryAtPath将失败,因为文档目录已存在。记录 的dynamicType表明error它实际上是一个NSError对象:
\n\n\nRun Code Online (Sandbox Code Playgroud)\nError Domain=NSCocoaErrorDomain Code=516 "The file \xe2\x80\x9cDocuments\xe2\x80\x9d couldn\xe2\x80\x99t be saved in the folder \xe2\x80\x9c35B0B3BF-D502-4BA0-A991-D07568AB87C6\xe2\x80\x9d because a file with the same name already exists." UserInfo={NSFilePath=/Users/jal/Library/Developer/CoreSimulator/Devices/E8A35774-C9B7-42F0-93F1-8103FBBC7118/data/Containers/Data/Application/35B0B3BF-D502-4BA0-A991-D07568AB87C6/Documents, NSUnderlyingError=0x7fa88bd14410 {Error Domain=NSPOSIXErrorDomain Code=17 "File exists"}}\n\nNSError\n
为了查看函数可能出现的不同类型的错误throw,您必须检查error信息以确定抛出的错误类型以及如何处理每个错误。在这种情况下NSError,将是它的域、代码和描述。
在这种特殊情况下,该路径中已存在目录,因此文件管理器无法创建新目录。此操作可能失败的另一个原因的示例是文件管理器没有写访问权限。那将是错误代码 256。
\n