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

标签 ios swift error-handling nserror

现在,在 Swift 中,一些函数被标记为 throws,这迫使开发人员在 do - try catch block 中调用函数。 但是开发人员如何知道该函数抛出的不同异常的列表?

作为引用,这里有一行 Java 代码:

static void  employeeAge(int age) throws MyExceptionA,MyExceptionB

此处很明显,异常是 2 个 MyExceptionAMyExceptionB,开发人员可以根据错误决定采取不同的行动。

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

最佳答案

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

考虑以下 NSFileManagercreateDirectoryAtPathdo-try-catch 流程:

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 将失败,因为文档目录已经存在。记录 errordynamicType 表明它实际上是一个 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

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

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

关于ios - 如何获取函数抛出的错误列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34877027/

相关文章:

ios - 有没有办法手动更改 PDF 的 url 路径并使其实时更新?

ios - “socket closed by remote peer” iOS,用于XMPP框架中的大文件

ios - 滑动以删除 UITableView 中的整个部分

iphone - iOS 4 蓝牙发现不起作用

javascript - 具体的错误消息与通用的错误消息?

error-handling - 如何配置 spring-kafka 以忽略格式错误的消息?

ios - Swift WebView 背景模式

ios - 如何从 Swift 的核心数据中删除特定的实体数据?

swift - 升级后的 Firebase - 在 FirebaseApp.configure() 上出错

python - 使用 OpenCV (python) 时如何隐藏/禁用 ffmpeg 错误?