如何为 WidgetKit 异步下载图像

Joa*_*ona 9 ios widgetkit urlsession swiftui

我正在为 iOS 开发小部件,但我真的不知道如何为小部件下载图像。

小部件当前下载一组对象,每个对象都有一个图像的 URL。这个想法是每个对象都SimpleEntryTimeline.

实现这一目标的最佳方法是什么?我读到 Widgets 不应该使用ObservableObject. 我在时间线提供程序中获取了一组对象,这似乎是 Apple 推荐的。但是我是否也在那里下载图像并等待所有完成后发送时间线?

任何建议都会非常有帮助,

小智 8

是的,您应该在时间线提供程序中下载图像,并在完成后发送时间线。请参阅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)
}
Run Code Online (Sandbox Code Playgroud)

然后我使用 SwiftUI 的 Image(uiImage:) 初始值设定项来显示图像