【问题标题】:Swift 3 error handling and variable accessibilitySwift 3 错误处理和变量可访问性
【发布时间】:2017-05-05 22:34:34
【问题描述】:

我有一个关于如何在 Swift 中使用新的错误处理的问题。

我正在将文件的内容读入数据对象:

var overallData: Data?

//load file contents into data object
let dataFileURL = NSURL(string: fileName)

do {
    overallData = try Data(contentsOf: dataFileURL as! URL)
} catch { 
    print("\(error)")
}

问题是我总是遇到这个错误信息:

致命错误:在展开可选值时意外发现 nil

问题是overallData 对象设置为nil。但是如果我没有在 do-catch 之外定义数据变量,

let dataFileURL = NSURL(string: fileName)

do {
    overallData = try Data(contentsOf: dataFileURL as! URL)
} catch { 
    print("\(error)")
}

后来,我不能使用overallData 对象,因为系统一直告诉我它是一个尚未定义的变量。所以看起来在 do-catch 循环中定义的新变量只能在循环内部进行本地访问。

你知道如何解决这个问题吗?我确实需要在别处使用overallData 对象。

【问题讨论】:

标签: ios swift error-handling swift3


【解决方案1】:

以下答案假设您的错误与该行有关:

overallData = try Data(contentsOf: dataFileURL as! URL)

如果您在另一行收到“致命错误”,请更新您的问题。


您的错误与do/catch/try无关。

您的问题是dataFileURL 的强制解包,即nil

你的问题是这一行:

let dataFileURL = NSURL(string: fileName)

这将返回 nil,因为 fileName 不是有效的 URL。

假设fileName是一个本地文件的路径,你需要这样做:

let dataFileURL = URL(fileURLWithPath: fileName)

还要注意使用URL 而不是NSURL。在 Swift 3 中使用 NSURL 毫无意义。

【讨论】:

  • 你好,你说的很对,是dataFileURL为nil的问题。解决了这个问题后,事情就顺利进行了。谢谢!
猜你喜欢
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 2011-01-11
  • 2011-04-03
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多