下载SwiftUI Listview中Firebase存储的图像(联系人应用程序)

下载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

我是Swift新手,我正在尝试在SwiftUI列表视图中显示:

  • 一些数据
  • 图像(链接到数据)
这是一种联系应用程序

所有这些数据都存储在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(路径: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")
        }
    }
}


请注意,我的类型

感谢您的帮助。我现在正在尝试!这对你有用吗?