gpt4 book ai didi

ios - 使用 Firebase 添加和检索 "User"下的多个值

转载 作者:行者123 更新时间:2023-11-29 05:08:13 24 4
gpt4 key购买 nike

我正在上传我的数据,如下所示:

enter image description here

通过使用这些函数:

extension Database {

func createPurchase (purchaseID : String, quantity: String, completion: @escaping (Error?) -> ()){

guard let uid = Auth.auth().currentUser?.uid else { return }

let userPostRef = Database.database().reference().child("purchases").child(uid) //taken off auto ID
let values = ["purchase" : purchaseID, "quantity" : quantity ] as [String: Any]

userPostRef.updateChildValues(values) { (err, ref) in
if let err = err {
print("Failed to save purchase to database", err)
completion(err)
return
}
completion(nil)
}
}

}

.

在 View Controller 1 中:

func callID (){
let itemCount = CartController.shared.items.count

for i in 0...itemCount-1 {

let quantity = CartController.shared.items[i].quantity
let quantity1 = String(quantity)
let item = CartController.shared.items[i].product.id

Database.database().createPurchase(purchaseID: item, quantity: quantity1 ) { (err) in
if err != nil {
print("error uploading purchase to Firebase ")
return
}
}
}
}

callID 使用 createPurchase 获取每个产品的 sku 编号及其数量,然后上传到 firebase。但是,它会覆盖之前上传的内容。所以当我加载超过 1 个产品时。它只留下最后的产品 sku 和数量。对于此示例,我从 3 个产品开始,但只上传了 1 个(最后一个)。我怎样才能上传所有数据。即停止这种覆盖?

这是我检索它的方法:

extension Database {
func fetchPurchase(withUID uid: String, completion: @escaping (Purchase) -> ()) {
Database.database().reference().child("purchases").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
guard let userDictionary = snapshot.value as? [String: Any] else { return }

let purchase = Purchase(uid: uid, dictionary: userDictionary)
completion(purchase)
}) { (err) in
print("Failed to fetch purchase from database:", err)
}
}
}

.

在 View Controller 2 中:

struct Purchase {

let uid: String
let purchases: String
let quantities: String


init(uid: String, dictionary: [String: Any]) {
self.uid = uid
self.purchases = dictionary["purchase"] as? String ?? ""
self.quantities = dictionary["quantity"] as? String ?? ""

}
}

var myPurchases: [Purchase] = []

private func fetchPurchaseForCurrentUser() {
guard let currentLoggedInUserId = Auth.auth().currentUser?.uid else { return }
Database.database().fetchPurchase(withUID: currentLoggedInUserId, completion: { (purchases) in
self.myPurchases.append(purchases)
print("myPurchases", self.myPurchases)
})
}

这是我得到的打印输出:

myPurchases [myShop.Purchase(uid: "Tgb9MyxTfdTRd9tQhInsjNRXoPL2", 购买: "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0Lzk4OTUzMDk2OTk=", 数量: "2")]

这仅显示一种产品,但我需要有多种产品。

请帮忙!

编辑:

这是我使用 ChildByAutoId() 时的屏幕截图。我得到了所有产品(本例中为 2 个)。但我无法从快照中检索信息并将其设置到我的文本字段?

enter image description here

最佳答案

从多条记录中准备一个数组,示例代码:

var myPurchases: [Purchase] = []
for (key, value) in userDictionary {
guard let dic = value as? [String: Any] else {
continue
}

let purchaseModel = Purchase(uid: key, dictionary: dic)
myPurchases.append(purchaseModel)
}

关于ios - 使用 Firebase 添加和检索 "User"下的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59959982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com