Возьмите данные из firebase, чтобы структурировать - PullRequest
0 голосов
/ 27 января 2020

Я создал простую базу данных в 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
}

Когда я вернул массив блюд, она пуста. У меня вопрос, как я могу использовать этот массив блюд из clousures и вернуть завершенный массив.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Я должен инициализировать свойства, arrayDi sh в другом классе:

У меня есть что-то подобное

 func takeData() {
    TakeDataToMainView().parseData { (result) in
        self.arrayDish = result
        self.mainDishCollection.reloadData()
    }
}

это работает, но, возможно, лучший способ сделать это, где мне не нужно использовать reloadData?

0 голосов
/ 27 января 2020

Вам нужно завершение

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...