gpt4 book ai didi

ios - 在获取数据 Firebase/Swift 之前加载 TableView

转载 作者:行者123 更新时间:2023-11-28 11:25:50 27 4
gpt4 key购买 nike

我有一个 FireBase 数据库,里面有一个产品表和另一个带有这些产品 ID 的订单表,我想做的是根据订单表内的 ID 从产品表中获取产品,因为FireBase 只允许我一个一个地获取产品,在我获取订单表中引用的所有产品之前加载我的表格 View 。

我是怎么做到的:

struct Product: Decodable, Encodable{
var id: String?
var ref: String
var description: String
var type: String
var price: String
var qtyOrdred:Int?
}

struct Order:Decodable, Encodable {

var id: String?
var isValide: Bool
var madeBy: String
var info: String?
var ordredProd: [OrderedProduct]

}

struct OrderedProduct:Decodable, Encodable {
var id: String
var qty: Int
}

func getData(completion: @escaping ([Product])->Void){
var allProduct = [Product]()
for product in orderedProduct {
getProductWithKey(qty: product.qty, key: product.id) { (p) in
print(p.ref)
allProduct.append(p)
}
}
}

func getProductWithKey(qty: Int,key: String, completion: @escaping (Product)->Void) {
Database.database().reference().child("products").child(key).observeSingleEvent(of: .value) { (snap) in
if let productObject = snap.value as? [String: Any]
{
if let ref = productObject["ref"],
let price = productObject["price"],
let type = productObject["type"],
let description = productObject["description"],
let id = productObject["id"]{
let p = Product(id: id as? String, ref: ref as! String, description: description as! String, type: type as! String, price: price as! String, qtyOrdred: qty)
completion(p)
}
}
}
}

我这样调用它:

override func viewWillAppear(_ animated: Bool) {
self.getData { (ps) in
print(ps)
self.tableView.reloadData()
}
}

问题是它总是打印一个空数组,而我的tableview数据永远不会改变

最佳答案

你没有从getData完成返回,你需要一个调度组

let g = DispatchGroup()
func getData(completion: @escaping ([Product])->Void){
var allProduct = [Product]()
for product in orderedProduct {
g.enter()
getProductWithKey(qty: product.qty, key: product.id) { (p) in
print(p.ref)
allProduct.append(p)
g.leave()
}
}
g.notify(queue:.main) {
completion(allProduct)
}
}

关于ios - 在获取数据 Firebase/Swift 之前加载 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58187511/

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