2017-02-14 9 views
0

からアレイへの追加ではないが、私のコードは次のとおりです。Elementは私が最終的にfirebaseからデータを取得することができた、と私はそれを表示することができますが、何らかの理由で、それは私がここにそれをしたい配列に追加されていないFireBase

override func viewDidLoad() { 
    super.viewDidLoad() 
    var arr = [String]() 
    DataService.instance.recievers.observeSingleEvent(of: .value) {(recipients: FIRDataSnapshot) in 
     if let recievers = recipients.value as? [String]{ 
      for i in recievers{ 
       print(i) 
       arr.append(i) 
      } 
     } 
    } 

    for i in arr{ 
     print(i) 
    } 
} 

データはprint(i)文からコンソールに出力されますが、最初のforループを残すと配列が空になります。なぜ誰に教えてください、どのようにこれを修正するには?

答えて

2

Firebaseコードは非同期です。それを追加していますが、配列に追加するまでには、あなたの

for i in arr { 
    print(i) 
} 

ステートメントはすでに実行されています。 Firebaseからデータを取得した後に何かを行うには、observeSingleEventの関数にコールバックする必要があります。

override func viewDidLoad() { 
    super.viewDidLoad() 
    var arr = [String]() 
    DataService.instance.recievers.observeSingleEvent(of: .value) {(recipients: FIRDataSnapshot) in 
     if let recievers = recipients.value as? [String]{ 
      for i in recievers{ 
       print(i) 
       arr.append(i) 
      } 
      displayArray(arr) 
     } 
    } 
} 

func displayArray(name: [String]) { 
    for i in arr{ 
     print(i) 
    } 
} 
+0

これは、ありがとうございました。 – andrewF

関連する問題

 関連する問題