CarPlay 远程图像到 UIImage
CarPlay remote Image to UIImage
我正在尝试为 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()
)
您的站点图像 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 异步加载数据。这是相同的 code and he has another article。
我正在尝试为 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()
)
您的站点图像 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 异步加载数据。这是相同的 code and he has another article。