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
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()
}
}
※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
Author And Source
この問題について(RxSwiftを使用してFirestoreからドキュメントを取得(メモ)), 我々は、より多くの情報をここで見つけました https://qiita.com/shuuujin/items/35a9f30bab387023b31b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .