下载SwiftUI Listview中Firebase存储的图像(联系人应用程序)
我是Swift新手,我正在尝试在SwiftUI列表视图中显示:下载SwiftUI Listview中Firebase存储的图像(联系人应用程序),swift,firebase,google-cloud-firestore,swiftui,google-cloud-storage,Swift,Firebase,Google Cloud Firestore,Swiftui,Google Cloud Storage,我是Swift新手,我正在尝试在SwiftUI列表视图中显示: 一些数据 图像(链接到数据) 这是一种联系应用程序 所有这些数据都存储在firestore中。我创建了一个函数,提供firestore上的图像URL: func getURL(path: String, completion: @escaping (((URL?) -> Void))) { let storage = Storage.storage() storage.reference().child(p
- 一些数据
- 图像(链接到数据)
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(路径:bike.access1,完成:{AnimatedImage中的路径(url:path)})
我知道我不能在视图中调用函数,但我不知道如何在SwiftUI列表视图中显示Firestore中的图像。
如果有人知道一个策略,我真的很感兴趣。
提前谢谢
Jean完成处理程序(通常)是处理异步代码的好方法。但是,它是一个视图
在SwiftUI中,使用@State或@Published值然后根据其状态有条件地呈现视图更为常见
我喜欢使用observateObject
视图模型来处理这类事情:
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")
}
}
}
请注意,我的类型感谢您的帮助。我现在正在尝试!这对你有用吗?