微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

下载 SwiftUI 列表视图中的 Firebase 存储图像联系应用程序

如何解决下载 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 举报,一经查实,本站将立刻删除。