FirebaseからデータをフェッチしてSwift配列のオブジェクトとして追加しようとしていますが、アプリケーションを実行するたびに配列が空になります。私がprint
の声明を観測の中に入れたとき、私はそれを望むように各財布が印刷されますが、財布は決して配列に追加されません。Swift with Firebase辞書に配列を書き込む
var purses = [Purse]()
override func viewDidLoad() {
fetchPurse(completion: {print(self.purses.count)})
}
func fetchPurse(completion: @escaping() ->()){
let ref = FIRDatabase.database().reference(fromURL: "https://test-database-ba3a2.firebaseio.com/")
let user = (FIRAuth.auth()?.currentUser?.uid)!
let userRef = ref.child("users").child(user).child("devices")
userRef.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject]{
let purse = Purse()
purse.setValuesForKeys(dictionary)
self.purses.append(purse)
completion()
}
}, withCancel: nil)
}
ここで、アレイを印刷しようとしていますか?非同期関数で配列に値を設定しているので、完了ハンドラの外側にある値を監視しようとすると、配列が生成される前に配列が出力される可能性が高くなります。 –
私は別の関数で配列を呼び出していますが、そこにいくつの袋があるかに基づいて、テーブルビューの特定の量のテーブルセルを読み込むために.countメソッドを使用しようとしています。 –
fetchPurse()には完了ハンドラがあり、完了ハンドラから他の関数を呼び出す必要があります。 –