質問: snapdata.value as! [String:String] //配列に追加 self.notificationArray.append(item) } //tableViewを更新 self.tableView.reloadData() } print("4") } ```
回答: これはFirebase Realtime Database を使い始めの方が一番初めにつまずくポイントです。 このポイントを押させてください。 **Realtime Databaseでは直接値を参照することはできない** そんな馬鹿なと思われますが、実際できません。 これはそういうものなのであきらめてください。 ではどのように値を参照するかというと 1. 前回から値が更新されたときに呼び出される関数を登録する 2. 前回から値が更新されると、その値(のコピー)を使って登録した関数が呼び出される。 という段階を経ることになります。 質問者さんのコードの`print("3")`の部分は 1) に当たります。 ここでは関数の登録だけで、関数は呼び出されません。 ただし、登録直後にネットワーク上の状態が確認され、前回から値が更新されているため関数が呼び出されます。 (最初の呼び出しなので前回はデータがないときと判断されます) 確認には少し時間がかかるため、実行は遅延されます。 また、この関数呼び出しは値の更新があるたび何度でも呼び出されますので、質問者さんのコードですと、値が更新されるたびに、表示が重複されることになりますので気を付けてください。