我正在尝试获取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
}


打印重复的二和零。

最佳答案

您需要在类的范围内声明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)
    }
})

关于swift - 从Firebase检索时实际上未设置变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42357296/

10-09 10:15