我正在尝试从主包中的文件加载数据。当我使用此代码时
let path = Bundle.main.path(forResource: "abc", ofType: "txt")
let dataTwo = try! Data(contentsOf: path)\\ error here
Run Code Online (Sandbox Code Playgroud)
我也尝试将字符串转换为 URL
let dataTwo = try! Data(contentsOf: URL(string: "file://\(path)")!)
Run Code Online (Sandbox Code Playgroud)
但执行后我得到了这个
致命错误:在解开 Optional 值时意外发现 nil
您可能想.url改用:
let url = Bundle.main.url(forResource: "abc", withExtension:"txt")
let dataTwo = try! Data(contentsOf: url!)
Run Code Online (Sandbox Code Playgroud)
并安全地处理错误而不是强制展开。
简单版:
if let url = Bundle.main.url(forResource: "abc", withExtension:"txt"),
let dataTwo = try? Data(contentsOf: url)
{
// use dataTwo
} else {
// some error happened
}
Run Code Online (Sandbox Code Playgroud)
更好的是:
do {
guard let url = Bundle.main.url(forResource: "abc", withExtension:"txt") else {
return
}
let dataTwo = try Data(contentsOf: url)
// use dataTwo
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
这样您就不需要将路径转换为 URL,因为您从一开始就使用了 URL,并且您可以处理错误。在您的特定情况下,您将知道您的资产是否在那里以及您的 URL 是否正确。
| 归档时间: |
|
| 查看次数: |
10377 次 |
| 最近记录: |