Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
22
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

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()

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

まとめ

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

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
22
Help us understand the problem. What are the problem?