什么类型的异常可能会抛出String(contentsOf url:URL)?

时间:2017-06-24 23:06:02

标签: swift

我正处于那个阶段,我正在重构一个原型,以便更灵活。这意味着我想添加错误处理。我的应用程序非常依赖于String(contentsOf:url),这与处理文件的任何操作一样,容易出错。但是,所讨论的init方法的签名只是:

{{1}}

所以我知道它会抛出......但具体是什么?当我不知道我可能会犯的错误时,我不确定我是否理解如何处理错误。 documentation也没有说什么。我很难过?

1 个答案:

答案 0 :(得分:1)

init(contentsOf:)来自Foundation的NSString API - 因此,与所有Foundation API一样,它会抛出一个描述错误的NSError。您可以像任何其他错误一样捕获它:

do {
    let str = String(contentsOf: theLocalURL)
    // ...
} catch {
    // Present `error.localizedDescription` to the user to let them know what went wrong
}

由于错误是NSError,您也可以将其捕获,以检查其code / userInfo

do {
    // Same as above
} catch let error as NSError {
    // Inspect what went wrong.
}

至于您可能期望的具体代码,请查看NSError Codes list中以NSFile ...开头的错误代码。如果文件不存在,公共代码可能是NSFileReadNoPermissionErrorNSFileReadNoSuchFileError

但是,一般情况下,您应该向用户显示错误的localizedDescription并中止操作或重试。