首页 > 解决方案 > 来自 URL 的 WidgetKit 图像

问题描述

我正在尝试将图像从 URL 加载到小部件。在我最近制作的另一个项目中,我已经这样做了。现在我正在尝试执行相同的方法并看到一些奇怪的错误Argument type 'URL' does not conform to expected type 'Decoder'Cannot convert value of type 'ExampleWidgetExtension.Data' to expected argument type 'Foundation.Data'. 我的另一个项目工作得很好,我Codable像以前一样使用数据。除了图像之外的一切似乎都在工作。

struct ExampleWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        VStack (alignment: .leading, spacing: 5) {
            ForEach(entry.model?.example.results?.prefix(1) ?? [], id: \.id) { example in
                /*
                 Text(example.data.title ?? "")
                 .fontWeight(.bold)
                 .font(Font.system(.caption))
                 .lineLimit(1)
                 */
                if let url = URL(string:example.data.url ?? ""),
                   let imageData = try? Data(from: url),
                   let uiImage = UIImage(data: imageData) {
                    Image(uiImage: uiImage)
                        .resizable()
                        .frame(width: 30, height: 30)
                }
            }
        }
        .padding(.all, 10)
    }
}

标签: swiftuiwidgetkit

解决方案


Data在(Foundation 中的那个)上没有URLfrom:字段中接受 a 的初始化程序。您收到错误的原因是该参数中Data(from:)需要 a Decoder。您说您有另一个项目可以执行此操作,但是您必须具有某种自定义扩展Data才能使其正常工作。

你想要的是let imageData = try? Data(contentsOf: url)


正如 pawello 在评论中指出的那样,看起来您的项目中可能已经有一个名为“Data”的自定义类型,因此可能需要执行以下操作:
try? Foundation.Data(contentsOf: url)

您可能需要考虑将您的 Data类型重命名为其他名称以避免与 Foundation 的命名空间冲突Data


推荐阅读