簡體   English   中英

無法轉換'String?'類型的值 預期的參數類型'URL'

[英]Cannot convert value of type 'String?' to expected argument type 'URL'

我正在嘗試從主包中的文件加載數據。 當我使用此代碼時

 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)")!)

但執行后我得到了這個

致命錯誤:在展開Optional值時意外發現nil

您可能想要使用.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,並且可以處理錯誤。 在您的具體情況下,您將知道您的資產是否存在以及您的網址是否正確。

對於文件URL,請使用init(fileURLWithPath :)構造函數。

也在這里

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

擺脫try! 並使用適當的錯誤處理來查看真正的錯誤發生的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM