【Swift/Firebase】observeメソッドの使い方!Realtime Database

この記事からわかること

  • Swift/Firebase作成したiOSアプリRealtime Databaseデータを観測する方法
  • observeメソッド使い方
  • 観測停止させるremoveAllObserversの使い方

index

[open]

\ アプリをリリースしました /

ふるログ

ふるさと納税管理アプリ-ふるログ-

無料posted withアプリーチ

FirebaseのRealtime DatabaseをSwiftで取り扱う場合に使用するobserveメソッドの使い方をまとめていきます。

observeメソッドとは?

公式ドキュメント:Appleプラットフォームでデータのリストを操作する

observeメソッドとはFirebase Realtime Databaseのデータベースを観測(observe)するメソッドです。このメソッドは初期の呼び出し時とサーバーの値が更新されたタイミングに毎回実行されます。しかしツリー状のルートを指定し呼び出すと全ての変更を観測することになるため、必要な深さまでを指定しアタッチするのが推奨されています。

observe(eventType: DataEventType, with: (DataSnapshot) -> Void)

更新を検知できるのはFIRDataEventType型の値で定義されているイベントです。1つ目の引数に観測するイベントを指定し、2つ目の変数から対象のデータを参照することができます。

.valueを指定すると値に対するあらゆる変更を観測します。

使用方法

observeメソッドは最初に一度呼び出せばあとは自動で更新タイミングで実行してくれるのでSwift UIならonAppear、UIKitならviewDidAppearなどの中で呼び出すと良いかもしれません。

例えばusersノード以下のあらゆる値の変更を観測するには以下のようになります。snapshot格納されるのはusers以下の階層のデータです。

.onAppear{
    ref.child("users").observe(.value) { snapshot in
        print("値が変更されました: \(snapshot.value as AnyObject)")
    }
}

さらに新規のデータを書き込む処理を実装していた場合、このボタンが押下されるたびobserveメソッドは呼ばれます。

Button(action: {
    ref.child("users").childByAutoId().setValue(["useername":"ame","age":25])
}, label: {
    Text("Add")
}).padding()

removeAllObserversメソッド

observeメソッドを一度実行するとアプリが停止するまで観測が続行されてしまいます。観測を明示的に停止させるにはremoveAllObserversメソッドを使用します。

例えば先ほどのようにusersノードを観測している場合は、そのノードからremoveAllObserversメソッドを呼び出します

ref.child("users").observe(.value) { snapshot in
    print("値が変更されました: \(snapshot.value as AnyObject)")
}
ref.child("users").removeAllObservers()

観測は停止させることができますが、データを一度だけ取得したい場合getDataメソッドを使用します。

ref.child("users").getData(completion:  { error, snapshot in
    guard error == nil else {
        print(error!.localizedDescription)
        return
    }
    if let dic = snapshot?.value as? [String:AnyObject]{
        self.userName = dic["username"] as? String ?? "Unknown"
    }
})

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

自作iOSアプリ

\ アプリをリリースしました /

mapping

自分だけの地図を作ろう!-mapping-

無料posted withアプリーチ

割り勘アプリ-bill-

旅行におすすめ!
割り勘アプリ-bill-

無料posted withアプリーチ

Imakoko

現在地を取得するアプリ!Imakoko

無料posted withアプリーチ

ふるログ

ふるさと納税管理アプリ-ふるログ-

無料posted withアプリーチ

Remind-シンプル通知アプリ-

シンプル通知アプリ-Remind-

無料posted withアプリーチ

CLIPURL

好きな記事をクリップしよう!-CLIPURL-

無料posted withアプリーチ

記録カレンダー

続けたを可視化できるアプリ!記録カレンダー

無料posted withアプリーチ

CART-共有できるお買い物リスト-

CART-共有できるお買い物リスト-

無料posted withアプリーチ

Githubにて
iOSアプリのソースコードを公開中!

自作Webアプリ

子育て知識共有サイト-mikata-

子育て知識共有サイト-mikata-

フレームワーク:Laravel/Vue.js

作成の流れQiita「Laravel×Vue.jsを使って初めてWebアプリを自作しました!」

感想:初めて作成したWebアプリです!メールアドレスでの会員登録や質問投稿、回答やコメント、いいねやフォローなどSNSに近い機能を実装してみました。レビューや修正すべきポイントなどを教えていただけると嬉しいです!

New Article

index