簡體   English   中英

如何將 firestore 文檔 ID 添加到我的模型並隨后添加到數組?

[英]How do I add firestore document Id to my model and subsequently to the array?

我有一個結構“訂單”,其中包含一個名為 orderId 的字段:

protocol OrderSerializable {
    init?(dictionary:[String:Any])
}

struct Order {
    var orderId: String
    var status: Int
    var currentTotal: Double

    var Dictionary:[String : Any] {
        return [
            "orderId": orderId,
            "status": status,
            "currentTotal": currentTotal
        ]
    }
}

extension Order : OrderSerializable {
    init?(dictionary: [String : Any]) {
        guard let orderId = dictionary["orderId"] as? String,
        let status = dictionary["status"] as? Int,
        let currentTotal = dictionary["currentTotal"] as? Double

        else { return nil }

        self.init(orderId: orderId, status: status, currentTotal: currentTotal)
    }
}

我需要將 firestore 文檔 Id 添加到模型數組中的 orderId 字段,即“ordersArray”。 我該怎么做?

到目前為止,這是我的查詢代碼,我已經指出了我需要的行:

orderRef.getDocuments() {
            querySnapshot, error in
            if let error = error {
                print("\(error.localizedDescription)")
            } else {
                guard let documents = querySnapshot?.documents else { return }
                for document in documents {
                    let orderDictionary = document.data() as [String : Any]
                    let order = Order(dictionary: orderDictionary)
                    // Here I want to append the firestore documentId to order.orderId before appending it to the array
self.ordersArray.append(order!)

                }
                DispatchQueue.main.async {
                    self.ordersTableView?.reloadData()
                }
            }
        }

提前致謝。

不同的錯誤在此處輸入圖片說明

修改您的擴展以接受documentId作為附加參數,並將其傳遞給創建的 Order 對象。

protocol OrderSerializable {
    init?(dictionary:[String:Any], id: String)
}
extension Order : OrderSerializable {
    init?(dictionary: [String : Any], id: String) {
        guard let status = dictionary["status"] as? Int,
        let currentTotal = dictionary["currentTotal"] as? Double
        else { return nil }

        self.init(orderId: id, status: status, currentTotal: currentTotal)
    }
}

然后,當您創建每個訂單時,將documentId作為id參數傳遞。

orderRef.getDocuments() {
            querySnapshot, error in
            if let error = error {
                print("\(error.localizedDescription)")
            } else {
                guard let documents = querySnapshot?.documents else { return }
                for document in documents {
                    let orderDictionary = document.data() as [String : Any]
                    let order = Order(dictionary: orderDictionary, id: document.documentId)
                    self.ordersArray.append(order!)

                }
                DispatchQueue.main.async {
                    self.ordersTableView?.reloadData()
                }
            }
        }

或者,您可以將orderId直接存儲在文檔本身中,以便將其與字典一起傳入,從而避免使用documentId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM