2017-02-21 5 views
0

Я пытаюсь получить число детей в этом разделе моей базы данных Firebase, однако переменная, которую я устанавливаю, только локально установлена. Интересно, что первый оператор печати печатает два (это число, которое я хочу), однако второй оператор печати печатает ноль. Как заставить функцию вернуть правильное значение. Спасибо вам за помощь.Переменная не задана при извлечении из Firebase

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
    var forReturn = 0 
    let databaseRef = FIRDatabase.database().reference() 
    databaseRef.child("gameNumber").observeSingleEvent(of: .value, with: { snapshot in 
     forReturn = Int(snapshot.childrenCount) 
     print(forReturn) 
    }) 
    print(forReturn) 
    return forReturn 
} 

Это печатает повторяющиеся двойки и нули.

+0

Это, вероятно, асинхронный блок – Pierce

ответ

0

Вам необходимо объявить forReturn в области класса и вызвать метод firebase в другом месте. Затем перезагрузите таблицу, когда вы попадете внутрь обработчика завершения firebase.

//In your viewDidLoad or wherever you think suitable  
let databaseRef = FIRDatabase.database().reference() 
databaseRef.child("gameNumber").observeSingleEvent(of: .value, with: { snapshot in 
    DisptachQueue.main.async { 
     forReturn = Int(snapshot.childrenCount) 
     self.tableView.reloadData() //take an outlet of tableView 
     print(forReturn) 
    } 
}) 
+0

Это асинхронный? Если это так, вы должны, вероятно, использовать 'DispatchQueue.main.async {}' – Pierce

+0

да, это асинхронно, мы можем также использовать dispatchqueue – Naresh

+0

, как бы вы это реализовали? – joshLor

Смежные вопросы