无法转换“字符串”类型的值?到预期的参数类型“URL”

Kar*_*ose 4 ios swift3

我正在尝试从主包中的文件加载数据。当我使用此代码时

 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

aya*_*aio 5

您可能想.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 是否正确。