我正在嘗試為 Apple CarPlay 顯示遠程影像。
我知道我需要進行擴展,因為默認情況下它不起作用。
我嘗試添加以下內容,但在呼叫初始化程式時沒有完全匹配,我不知道這意味著什么或如何修復。
extension UIImage {
func imageFromBase64(_ base64: String) -> UIImage? {
if let url = URL(string: base64), let data = try? Data(contentsOf: url) {
return UIImage(data: data)
}
return nil
}
}
let item = CPListItem(text: station.name,
detailText: station.name,
image: station.imageurl.imageFromBase64()
)
uj5u.com熱心網友回復:
您的站影像 url 可能是一個String或一個URL型別,但是您的擴展是 UIImage 型別,所以型別不匹配。
最好只創建一個簡單的函式而不是擴展
func imageFromBase64(_ base64: String) -> UIImage? {
if let url = URL(string: base64),
let data = try? Data(contentsOf: url) {
return UIImage(data: data)
}
return nil
}
let item = CPListItem(text: station.name,
detailText: station.name,
image: imageFromBase64(station.imageurl))
如果您確實想讓它成為 UIImage 擴展,我認為您需要使用 URL 初始化 UIImage,因此這是一個選項:
extension UIImage {
convenience init?(url: URL?) {
guard let url = url,
let data = try? Data(contentsOf: url)
else {
self.init()
return
}
self.init(data: data)
}
}
let url = URL(string: station.imageurl)
let stationImage = UIImage(url: url)
let item = CPListItem(text: station.name,
detailText: station.name,
image: stationImage)
但是,這會在加載時阻塞主執行緒,所以我建議查看一個名為fruitcoder
他展示了如何為 CarPlay 異步加載資料。這是代碼,他還有另一篇相同的文章。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/452275.html
上一篇:將資料解碼為結構物件失敗
下一篇:為CarPlay創建串列
