前提・実現したいこと
Firebaseに格納されているデータを取得してきて、配列に格納して利用したいのですが、
配列に格納できません。厳密に言うと格納はできるのですが、その配列を利用することができないと言うか、格納されているようで実際には格納されていないと言うか、言葉で説明するのが難しいので、下のコードと一緒に説明します。
プログラミング初心者で基本的な部分がわかっていないのが原因だと思うのですが、調べ方も悪いのか、自分ではどうしようにも解決できなかったので質問させていただきました。
プログラム1
swifrt
1class ViewController: UIViewController { 2 3 var DBRef: DatabaseReference! 4 var users: [String] = []//Firebaseのデータの格納先の配列 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 DBRef = Database.database().reference() 9 let defaultPlace = DBRef.child("users")//users以下のデータを取得 10 defaultPlace.observe(.value ) { 11 (snap: DataSnapshot) in 12 self.users = snap.value! as! [String]//メンバ変数?に取得したデータを代入 13 print(self.users)//["太郎","次郎","三郎"]と出力される 14 } 15 } 16}
プログラム2
swifrt
1class ViewController: UIViewController { 2 3 var DBRef: DatabaseReference! 4 var users: [String] = []//Firebaseのデータの格納先の配列 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 DBRef = Database.database().reference() 9 let defaultPlace = DBRef.child("users")//users以下のデータを取得 10 defaultPlace.observe(.value ) { 11 (snap: DataSnapshot) in 12 self.users = snap.value! as! [String]//メンバ変数?に取得したデータを代入 13 } 14 print(self.users)//[]が出力される 15 } 16}
プログラム2でprint文をdefaultPlace.observe(.value){}の外部に出したところ、空の配列が出力されてしまいました。
つまり、defaultPlace.observe(.value){}の内部でしか、usersにデータが格納したことになっていないということなのだと考えたのですが、この考えで間違いはないでしょうか...
私がやりたい事は、プログラム2でも["太郎","次郎","三郎"]が出力される事です。
どういった記述をすれば、それが実現できるのでしょうか。
わかりにくい説明で大変申し訳ないのですが、アドバイスよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/10 17:24
2019/12/10 17:29
2019/12/12 09:09