Измените ваше расширение, чтобы принять 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
.