如何获取函数抛出的错误列表?

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上实现同样的目标吗?

JAL*_*JAL 3

当 Swift 文档提到一个 function 时throws,他们的意思是它抛出一个异常ErrorType(在 Cocoa API 中通常是一个异常NSError),而不是异常。

\n\n

考虑\'sdo-try-catch的以下流程:NSFileManagercreateDirectoryAtPath

\n\n
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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

createDirectoryAtPath将失败,因为文档目录已存在。记录 的dynamicType表明error它实际上是一个NSError对象:

\n\n
\n
Error 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
Run Code Online (Sandbox Code Playgroud)\n
\n\n

为了查看函数可能出现的不同类型的错误throw,您必须检查error信息以确定抛出的错误类型以及如何处理每个错误。在这种情况下NSError,将是它的域、代码和描述。

\n\n

在这种特殊情况下,该路径中已存在目录,因此文件管理器无法创建新目录。此操作可能失败的另一个原因的示例是文件管理器没有写访问权限。那将是错误代码 256。

\n