首页 > 解决方案 > 保存数据后从firebase获取数据

问题描述

下面代码的第一部分工作正常,这意味着我可以根据需要将数据存储在 firebase 中。但是在'self.showResult = true'行之后,我还想获取数据并使'self.page'等于数据。不知何故,当我打印“页面”时,我总是得到“零”。谁能解释我在获取数据时犯了什么样的错误?

这是视图模型


import Firebase
import SwiftUI

class LoadPageViewModel: ObservableObject{
    @Published var page: Page? = Page(id: "", speakerName: "", speakerImageUrl: "", speech: "", place: "", placeImageUrl: "", action: "", index: "")
    
    let script: Script
    @Published var showResult: Bool = false
    @Published var index: Int = 0
    
    @Published var showUpdate = false
    
    init(script: Script){
        self.script = script
    }
    
    func uploadPage1(speakerName: String, image1: UIImage, speech: String, place: String, image2:UIImage, action: String){
        guard let user = AuthViewModel.shared.currentUser else {return}

        imageUploader.uploadImage(image: image1, type: .post){speakerImageUrl in
            imageUploader.uploadImage(image: image2, type: .post){placeImageUrl in
                let pageId = UUID().uuidString

                let data = [
                    "id": user.id ?? "",
                    "speakerName": speakerName,
                    "speakerImageUrl": speakerImageUrl,
                    "speech": speech,
                    "place": place,
                    "placeImageUrl": placeImageUrl,
                    "action": action,
                    "index": String(self.index)
                ]
                
                Firestore.firestore().collection("scripts").document(self.script.id ?? "").collection("page\(self.index)").document(pageId).setData(data) {error in
                    if let error = error{
                        print("Error uploading script \(error.localizedDescription)")
                        return
                    }
                }
                
                self.showResult = true
                
                if self.showResult{
                    Firestore.firestore().collection("scripts").document(self.script.id ?? "").collection("page\(self.index)").document(pageId).getDocument { (snapshot, _) in
                        
                        self.page = try? snapshot?.data(as: Page.self)
                        
                    }
                }
            }
        }
    }
}

这是模型



import FirebaseFirestoreSwift

struct Script: Identifiable, Decodable{
    @DocumentID var id: String?
    var name: String
    var ownerUid: String
}

struct Page: Identifiable, Decodable{
    @DocumentID var id: String?
    var speakerName: String?
    var speakerImageUrl: String?
    var speech: String?
    var place: String
    var placeImageUrl: String
    var action: String
    var index: String
}

标签: swiftfirebaseswiftuifetch

解决方案


推荐阅读