Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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 開発時に取得完了タイミングがわからなくて調べました。
また時間ができたら他の技術要素でシェアしていきたいと思います。

From_F
iOSアプリやArduinoを使って色々作っています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away