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

如何从Firebase填充已加载的记录?

如何解决如何从Firebase填充已加载的记录?

我编写了从Firebase记录记录的函数,但是有错误

转义转义符捕获变异的'self'参数

函数编写如下:

let db = Firestore.firestore()
@State var libraryImages: [LibraryImage] = []

mutating func loadImages() {
        libraryImages = []
        
        db.collection(K.FStore.CollectionImages.collectionName).getDocuments() { (querySnapshot,err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                if let snapshotDocuments = querySnapshot?.documents {
                    for document in snapshotDocuments {
                        let documentData = document.data()
                        let title: String = documentData[K.FStore.CollectionImages.title] as! String
                        let thumbnailUrl: String = documentData[K.FStore.CollectionImages.thumbnailUrl] as! String
                        let svgUrl: String = documentData[K.FStore.CollectionImages.svgUrl] as! String
                        let libraryImageItem = LibraryImage(title: title,thumbnailUrl: thumbnailUrl,svgUrl: svgUrl)
                        self.libraryImages.append(libraryImageItem)
                    }
                }
            }
        }
    }

有人知道导致错误的原因以及如何消除错误吗?

解决方法

将所有这些移动到引用类型视图模型中,并将其用作视图中的观察对象

以下是可能方法的演示:

struct DemoView: View {
  @ObservedObject var vm = ImagesViewModel()
//  @StateObject var vm = ImagesViewModel()       // << SwiftUI 2.0

  var body: some View {
     Text("Loaded images: \(vm.libraryImages.count)")
       .onAppear {
           self.vm.loadImages()
       }
  }
}


class ImagesViewModel: ObservableObject {
    let db = Firestore.firestore()
    @Published var libraryImages: [LibraryImage] = []

    func loadImages() {
        libraryImages = []

        db.collection(K.FStore.CollectionImages.collectionName).getDocuments() { (querySnapshot,err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                if let snapshotDocuments = querySnapshot?.documents {
                    var images = [LibraryImage]()
                    for document in snapshotDocuments {
                        let documentData = document.data()
                        let title: String = documentData[K.FStore.CollectionImages.title] as! String
                        let thumbnailUrl: String = documentData[K.FStore.CollectionImages.thumbnailUrl] as! String
                        let svgUrl: String = documentData[K.FStore.CollectionImages.svgUrl] as! String
                        let libraryImageItem = LibraryImage(title: title,thumbnailUrl: thumbnailUrl,svgUrl: svgUrl)
                        images.append(libraryImageItem)
                    }

                    DispatchQueue.main.async {
                        self.libraryImages = images
                    }
                }
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。