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 可能是 StringURL 类型,但是您的扩展是针对 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