swiftui - 来自 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)
}
}
解决方案
Data
在(Foundation 中的那个)上没有URL
在from:
字段中接受 a 的初始化程序。您收到错误的原因是该参数中Data(from:)
需要 a Decoder
。您说您有另一个项目可以执行此操作,但是您必须具有某种自定义扩展Data
才能使其正常工作。
你想要的是let imageData = try? Data(contentsOf: url)
正如 pawello 在评论中指出的那样,看起来您的项目中可能已经有一个名为“Data”的自定义类型,因此可能需要执行以下操作:
try? Foundation.Data(contentsOf: url)
您可能需要考虑将您的 Data
类型重命名为其他名称以避免与 Foundation 的命名空间冲突Data
推荐阅读
- docker - 如何修复 Docker-Compose(Hyperledger Fabric)中的“Compose 文件 './docker-compose.yaml' 无效,因为”错误?
- c# - 为 Remotewebdriver 设置语言 - BrowserStack 端点
- node.js - 如何获取集群上所有可用服务的列表?
- html - 如何一次在多个文件中添加一个html元素
- javascript - 从 WEB 页面读取客户端机器注册表
- elasticsearch - elasticsearch script_score中的多个Math.pow不起作用
- javascript - 使用 Jest Enzyme 测试时如何测试子组件中的按钮单击?
- wix - 是否可以在 WIX 中从文件夹和文件的结构中创建 zip 文件?
- java - 我想了解为什么我无法获得结果
- angular - Angular Material Autocomplete:onfocus 保持建议面板关闭