一尘不染

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

swift

现在,使用Swift时,某些函数都标有throws,这迫使开发人员在do - try catch块内调用该函数。但是开发人员如何才能知道该函数抛出的不同异常列表?

作为参考,这是一行Java代码:

static void  employeeAge(int age) throws MyExceptionA,MyExceptionB

很明显,例外是2 MyExceptionAMyExceptionB开发人员可以根据错误决定采取不同的操作。

我们可以在Swift上实现相同的目标吗?


阅读 290

收藏
2020-07-07

共1个答案

一尘不染

当Swift文档说一个函数时throws,它们意味着它抛出一个ErrorType(在Cocoa API中通常为NSError),而不是异常。

考虑以下do-try- catch流量NSFileManagercreateDirectoryAtPath

let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]

do {
    try NSFileManager.defaultManager().createDirectoryAtPath(documentsPath, withIntermediateDirectories: false, attributes: nil)
} catch { 
    // 'error' variable automatically populated
    print(error)
    print(error.dynamicType)
}

createDirectoryAtPath将失败,因为documents目录已经存在。日志记录dynamicType的的error显示,它实际上是一个NSError对象:

Error Domain=NSCocoaErrorDomain Code=516 "The file “Documents” couldn’t

be saved in the folder “35B0B3BF-D502-4BA0-A991-D07568AB87C6” 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”}}

NSError

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

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

2020-07-07