ios - 如何为 WidgetKit 异步下载图像

标签 ios swiftui urlsession widgetkit

我正在为 iOS 开发 WidgetKit ,但我真的不知道如何下载 WidgetKit 的图像。
WidgetKit 当前下载一组对象,每个对象都有一个图像的 URL。这个想法是每个对象都会产生 SimpleEntry对于Timeline .
实现这一目标的最佳方法是什么?我读到 WidgetKit 不应该使用 ObservableObject .我在时间线提供程序中获取一组对象,这似乎是 Apple 推荐的。但是我是否也在那里下载图像并等到所有完成发送时间线?
任何建议都会非常有帮助,

最佳答案

是的,您应该在时间线提供程序中下载图像,并在完成后发送时间线。引用以下recommendation由 Apple 框架工程师编写。
我使用调度组来实现这一点。
就像是:

let imageRequestGroup = DispatchGroup()
var images: [UIImage] = []
for imageUrl in imageUrls {
    imageRequestGroup.enter()
    yourAsyncUIImageProvider.getImage(fromUrl: imageUrl) { image in
        images.append(image)
        imageRequestGroup.leave()
    }
}
imageRequestGroup.notify(queue: .main) {
    completion(images)
}
然后我使用 SwiftUI 的 Image(uiImage:) 初始化程序来显示图像

关于ios - 如何为 WidgetKit 异步下载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63173928/

相关文章:

ios - Swift3:用户输入的实时 UiLabel 更新

ios - 给定一个自定义形状,如何增加尺寸以适应 SwiftUI 中的框架?

ios - swift - 如何从服务器获取 JSON 响应

swift - 许多任务中的一种方法 async/await

ios - 将对象从 URLSession 传递到 ViewController

ios - 有没有办法在关机前将以前的版本从 testflight 迁移到 itunesconnect?

iphone - 将NSData转换为字节数组

objective-c - iOS 设置与模型捆绑

ios - Xcode 12 中的 “Cannot preview in this file - Connection interrupted: send previewInstances message to agent"错误

swift - 如何使用 SwiftUI 中的扩展将 Hashable 协议(protocol)添加到 CLLocationCoordinate2D