現在Firebaseを使用していて、ノード内の子の数のカウントを取得して、UITableViewController
のセクションの行を決定しようとしています。しかし、呼び出しが非同期であるため、外部に正しく保存されません。Swift - 非同期呼び出し(Firebase)に割り当てられた戻り値
注:データ・ベースの子の数である "count"という値を割り当てましたが、実際に子を数える関数も非同期です。ここで
は私のコードです:ここでは
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let userID = FIRAuth.auth()?.currentUser?.uid
ref = FIRDatabase.database().reference()
var count = 0
if section == 0 {
ref.child("users").child("merchants").child(userID!).child("menu").child(spirits[section]).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let count = value?["count"] as? Int
print("count in: ", count!)
})
print("count out: ", count)
} else {
count = 0
}
return count
}
が出力されます。
はアウトカウント:0 はアウトカウント:0 はアウトカウント:0 はアウトカウント:0 はアウトカウント:0 を数:1 件数:1 件数:1 件数:1 件数:1
ディスパッチまたは完了コードの説明を試みた複数のスタックオーバーフローに関する質問を検索しましたが、何もできませんでした。私のカウントを適切に返すにはどうすればよいですか?