はじめに
Cloud Firestoreにデータを追加する際に、Codable
を使用したいと思ったところ、サポートされているようなので確認してみました。備忘録です。
Map または Dictionary オブジェクトを使うとドキュメントを表しにくいことが多いため、Cloud Firestore では、カスタムクラスを使ったドキュメント作成をサポートしています。Cloud Firestore は、オブジェクトをサポートされているデータ型に変換します。
実装方法
以下、公式ドキュメントのコードを引用しています。
public struct City: Codable {
let name: String
let state: String?
let country: String?
let isCapital: Bool?
let population: Int64?
enum CodingKeys: String, CodingKey {
case name
case state
case country
case isCapital = "capital"
case population
}
}
let city = City(name: "Los Angeles",
state: "CA",
country: "USA",
isCapital: false,
population: 5000000)
do {
try db.collection("cities").document("LA").setData(from: city)
} catch let error {
print("Error writing city to Firestore: \(error)")
}
上記コードのように、複雑なデータも綺麗にまとめて追加することができます。
ここで一点注意が必要です。
今回、私はプロジェクトにFirestoreをCocoaPodsでインストールしてFirebaseモジュールをインポートしていたのですが、これでは上記のコードにもあるsetData(from:)メソッドは使用できません。
方法としては、まずpodfileに以下を追加します。
pod FirebaseFirestoreSwift
あとは、
import FirebaseFirestoreSwift
で使用できるようになります。
最後に
カスタムなデータ型をFirestoreに追加したいケースは結構ありそうなので役立てば良いなと思います。
参考文献
以下の情報を参考にしました
公式の方法でFirestoreでCodable #firebase #firestore #codable