RxSwiftを使用してFirestoreからドキュメントを取得(メモ)


RxSwiftについてのお勉強、Firestoreからデータ取得する処理を書いていたので、
組み合わせて書いてみた時のメモです。
もっとこうした方が良いや、この書き方は無いな等あればアドバイスいただければ幸いです。

環境

  • Xcode: 11.3.1
  • Firebase: 6.16.0
  • RxSwift: 5.1.0

・ViewModel

FireStoreTmpViewModel.swift
    // Firestoreからドキュメントを取得
    func getFsData() -> Single<Any?> {
        return Single<Any?>.create { (observer) -> Disposable in
            Firestore.firestore().collection("collectionName").getDocuments(){ (querySnapshot, err) in
                if let error = err {
                    // エラー
                    observer(.error(error))
                    return
                }
                if let snapShot = querySnapshot {
                    // Firestoreからデータ取得成功
                    observer(.success("success"))
                    return
                }
            }
            return Disposables.create()
        }
    }

・ViewController

※disposebagとviewModelはメンバに定義済とする

FireStoreTmpViewController.swift
    // Firestoreからドキュメントを取得
    // メニューを取得
    func getFsData() {
        self.disposeBag = DisposeBag()
        self.viewModel.getFsData().subscribe { obeserver in
            switch obeserver {
            case .success:
                // データ取得成功時の処理(tableViewの更新処理など)
            case .error(let error):
                // エラー表示(アラート表示など)
            }
        }.disposed(by: self.disposeBag)
    }

今後

FireStoreリクエスト用の共通Modelを作り汎用化させていきたい・・・
(今だとコレクション名も何もかも固定値埋め込んでいるので・・・)

Twitter始めました!よろしければフォローお願いします。
@yajima_tohshu