从Firebase获取数据以构建

时间:2020-01-27 20:37:30

标签: swift database xcode

我在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
}

当我归还盘子时,她是空的。 我的问题是,如何才能从圆盘状餐具中使用此菜式阵列并返回完成的阵列。

2 个答案:

答案 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吗?