LoginSignup
56
26

More than 3 years have passed since last update.

公式の方法でFirestoreでCodable #firebase #firestore #codable

Last updated at Posted at 2019-07-21

FirebaseのNoSQLであるFirestoreはiOS上で利用する場合、基本的に NSDictionary 型でやり取りしていました。

例としては

// Documentの追加
let data = ["key": "value"]
let ref = Firestore.firestore().collection("hoge").addDocument(data: data) { error in
    if error == nil {
        let documentID = ref.documentID
        // something todo
    }
}
// Documentの取得
let documentID = ...
Firestore.firestore().collection("hoge").document(documentID).getDocuments { (snapshot, error) in
    guard let data = snapshot?.data() else { return }
    let value = data["key"]
    // something todo
}

こんな感じだったかと思います。

Codable

Swiftには4からCodableという機能が導入されました。
FirestoreがJSON形式のData型でやり取りしてくれたらCodableが利用出来るのになと何度考えた事か...
そこでalickbass/CodableFirebaseというライブラリを利用していた方も多かったのでは?
そんな中、公式の方法でCodableが利用出来る様になっていました。

まだ、公式のCocoaPodsには登録されて無い様なので、利用する方法としては@yimajoさんのTweetを参考するのが良さそうです。

Podfileに

pod 'Firebase/Core'
pod 'Firebase/Firestore'
pod 'FirebaseFirestoreSwift', '~> 0.2'

としてpod installでインストールが完了です。

2019/10/25追記

コメントにてGitの指定が必要なくなった旨を共有頂いたので編集しました。

2019/10/25追記終わり

使い方

使い方は

import FirebaseFirestoreSwift を記述して、エンコーダーはlet encoder = Firestore.Encoder()、デコーダーはlet decoder = Firestore.Decoder()を利用します。

後はJSONEncoder/Decoderなどと同様に利用する事が可能です。
alickbass/CodableFirebaseを利用していた方は

- import CodableFirebase
+ import FirebaseFirestoreSwift
- let decoder = FirestoreDecoder()
+ let decoder = Firestore.Decoder()
- let encoder = FirestoreEncoder()
+ let encoder = Firestore.Encoder()

の修正だけで良いので移行が簡単に可能です。

まとめ

個人的には利用する外部ライブラリが多いと依存が増えたり、アプリのサイズや起動時間に影響が出るのでなるべく控え、それでも利用しないといけない場合は、ある程度メンテが活発で公式にサポートがある物を選びたいなと思っていました。
今回は公式でサポートが増えたのがとても良いなと思いました。
また、これまで出来ないと思っていた事が出来る様になるのも嬉しいですね。

56
26
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
26