Posted at

FirebaseのRealtimeDatabaseでobserveSingleEvent取得結果で0件だったときの判定方法


FirebaseのRealtimeDatabaseでobserveSingleEvent取得結果で0件だったときの判定方法


はじめに

FirebaseのRealtimeDatabaseから新規追加されたデータを逐次取得する でデータ取得でデータベースに未登録のことをどう判定すればよいのかわからないことがありました。

単純だったのですが、気づかなかったので共有します。


データの一括取得でデータが存在しないってどう判定すればいいの?

Firebase公式ドキュメントの データの1回読み取り を見ると一見簡単に一括取得できそうです。

しかしながら、データがないときはどうればいいのでしょうか?

value イベントのリッスンという項目に答えがありました。


データが存在しない場合、スナップショットから返されるのは、exists() を呼び出した場合は false で、value プロパティを読み取った場合は nil です。


データが存在しない場合は、nilとなるでした。

前回のインデックス用のデータ取得のサンプルコードを例にすると guard let 〜 else { return } のreturnルートに入るとデータが存在しないことになります。

サンプルコードを少し修正して print 文を加えてみました。

fireDatabase.child("index").observeSingleEvent(of: .value, with: { (snapshot) in

// Get user value
guard let values = snapshot.value as? [String:Any] else {
print("データは存在しない")
return
}
values.forEach({ (key,value) in
guard let record = value as? [String:Any] else { return }
guard let timeInterval1970 = record[self.keyDate] as? TimeInterval else { return }
let date = Date(timeIntervalSince1970: timeInterval1970)
guard let uuid = record[self.keyUUID] as? String else { return }
// ここに何か処理を書く
})
}) { (error) in
print(error.localizedDescription)
}


最後に

ARKitとFirebaseを組み合わせて空間にメッセージを共有できるSNSアプリ ARIZAR を開発しました。

この ARIZAR 開発時に取得完了タイミングがわからなくて調べました。

また時間ができたら他の技術要素でシェアしていきたいと思います。