【问题标题】:What kinds of exceptions might String(contentsOf url:URL) throw?String(contentsOf url:URL) 可能抛出什么样的异常?
【发布时间】:2017-06-24 23:06:02
【问题描述】:

我正处于重构原型以使其更加灵活的阶段。这意味着我想添加错误处理。我的应用程序非常依赖 String(contentsOf:url) ,与任何处理文件的操作一样,它很容易出错。然而,有问题的 init 方法的签名只是写着:

init(contentsOf url: URL) throws

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

【问题讨论】:

  • 你不应该使用那个初始化器。使用 URLSession 加载数据。
  • 不是用于下载网络数据的 URL 会话吗?我只是在加载一个本地文件。
  • 好的,对于本地文件应该没问题。

标签: swift


【解决方案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... 开头的错误代码。如果文件不存在,常见代码可能是NSFileReadNoPermissionError 或NSFileReadNoSuchFileError。

不过,一般情况下,您应该向用户显示错误的localizedDescription,然后中止操作或重试。

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2021-04-17
    相关资源
    最近更新 更多