2017-02-21 36 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