如何解决下载 SwiftUI 列表视图中的 Firebase 存储图像联系应用程序
我是 Swift 新手,我正在尝试在 SwiftUI ListView 中显示:
这是一个联系人应用程序。
所有这些数据都存储在 firestore 中。我创建了一个函数,它提供了 firestore 上的图像 URL:
func getURL(path: String,completion: @escaping (((URL?) -> Void))) {
let storage = Storage.storage()
storage.reference().child(path).downloadURL(completion: { url,error in
guard let url = url,error == nil else {
return
}
let urlPath = url.absoluteURL
completion(urlPath)
})
}
但是当我在 SwiftUI 视图中调用此函数时,出现以下错误:
“类型'()'不能符合'视图';只有结构/枚举/类类型可以符合协议”
getURL(path: bike.access1,completion: { path in AnimatedImage(url: path)})
我知道我无法在视图中调用函数,但我不知道如何在 SwiftUI 列表视图中显示来自 Firestore 的图像。 如果有人知道策略,我真的很感兴趣。 提前致谢 让
解决方法
完成处理程序(通常)是处理异步代码的好方法。但是,它是 SwiftUI 中的 View
,使用 @State 或 @Published 值然后根据其状态有条件地呈现视图更为常见。
我喜欢对这种事情使用 ObservableObject
视图模型:
class ViewModel : ObservableObject {
@Published var imageURL : URL?
func getURL(path: String) {
let storage = Storage.storage()
storage.reference().child(path).downloadURL(completion: { url,error in
guard let url = url,error == nil else {
return
}
self.imageURL = url
})
}
}
struct ContentView : View {
@StateObject private var viewModel = ViewModel()
var body: some View {
VStack {
if let url = viewModel.imageURL {
AnimatedImage(url: url)
}
}.onAppear {
viewModel.getURL(path: "URL_STRING_GOES_HERE")
}
}
}
注意我的类型
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。