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

时间:2016-11-01 13:07:04

标签: ios swift3

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

 let path = Bundle.main.path(forResource: "abc", ofType: "txt")
 let dataTwo = try! Data(contentsOf: path)\\ error here

我还尝试将String转换为URL

 let dataTwo = try! Data(contentsOf: URL(string: "file://\(path)")!)

但是执行后我得到了这个

  

致命错误:在解包可选值时意外发现nil

2 个答案:

答案 0 :(得分:2)

您可能希望改为使用.url

let url = Bundle.main.url(forResource: "abc", withExtension:"txt")
let dataTwo = try! Data(contentsOf: url!)

并安全地处理错误而不是强行解包。

简单版本:

if let url = Bundle.main.url(forResource: "abc", withExtension:"txt"),
    let dataTwo = try? Data(contentsOf: url) 
{
    // use dataTwo
} else {
    // some error happened
}

更好:

do {
    guard let url = Bundle.main.url(forResource: "abc", withExtension:"txt") else {
        return
    }
    let dataTwo = try Data(contentsOf: url)
    // use dataTwo
} catch {
    print(error)
}

这样您就不需要将路径转换为URL,因为您从一开始就使用了URL,并且可以处理错误。在您的具体情况下,您将知道您的资产是否存在以及您的网址是否正确。

答案 1 :(得分:0)

对于文件URL,请使用init(fileURLWithPath:)构造函数。

也在这里

let dataTwo = try! Data(contentsOf: path)\\ error here

摆脱try!并使用正确的错误处理来查看真正的错误发生的原因。