我在firebase中创建了简单的数据库,然后尝试将这些数据带到我的自定义结构中。这是我的代码:
func parseData() -> Array<Dish> {
var dishes: Array<Dish> = []
let reference = Database.database().reference().child("dishes")
reference.queryOrderedByKey().observe(.value) { (snapshot) in
if let objects = snapshot.children.allObjects as? [DataSnapshot] {
for item in objects{
let dish = Dish(snapshot: item)
dishes.append(dish)
}
}
there all works
print(dishes[0])
}
//out of clousures
print(dishes[0])
// Error index out of range
return dishes
}
当我归还盘子时,她是空的。 我的问题是,如何才能从圆盘状餐具中使用此菜式阵列并返回完成的阵列。
答案 0 :(得分:0)
您需要完成
func parseData(completion:@escaping ( [Dish] -> ())) {
var dishes: Array<Dish> = []
let reference = Database.database().reference().child("dishes")
reference.queryOrderedByKey().observe(.value) { (snapshot) in
if let objects = snapshot.children.allObjects as? [DataSnapshot] {
for item in objects {
let dish = Dish(snapshot: item)
dishes.append(dish)
}
completion(dishes)
}
}
}
也可以考虑用observeSingleEvent
而不是observe
来打电话
parseData { arr in
print(arr)
}
答案 1 :(得分:0)
我必须初始化其他类中的属性arrayDish
我有这样的想法
func takeData() {
TakeDataToMainView().parseData { (result) in
self.arrayDish = result
self.mainDishCollection.reloadData()
}
}
这是可行的,但是也许是更好的方法,我不需要使用reloadData吗?