Open7
iOSでFirestoreを使うときのハック
iOSでFirestoreを利用するときはFirebaseのFirebase Apple SDKを利用すると思う。
SwiftでCodableに対応したいのであれば
FirebaseFirestoreSwift
を利用するば簡単にCodableにも対応できる。
FirebaseFirestoreSwiftで利用される@DocumentID
の問題。
- DocumentIDはオプショナル
- Nestした構造に使えない
FirebaseFirestoreSwiftでは次のようにid
を定義する。このときid
がnilであればidは自動生成される
struct YourEntity: Codable {
@DocumentID var id: String?
}
Firebase DocumentIDの発行はAutoIDで英数字大文字小文字を合わせてランダム生成される。
なぜランダムに生成してるのかはDBの性能に関わるの問題なのでDBのAuto Incrementを勉強してください。
FirebaseFirestoreSwiftでDocumentIDが決定するのはDocumentにデータをセットするタイミングだと思われる。この場合一度Documentを保存してからでないとDocumentIDが使えない。
本家Firestoreと同じロジックで事前に自動生成されるDocumentIDを作った。
本家のDocumentIDはJSONDecoder,JSONEncoderには非対応。
idを持った構成をNestしたいときに対応できない。
struct Team: Identifiable, Codable {
@DocumentID var id: String
var members: [User]
}
struct User: Identifiable, Codable {
@DocumentID var id: String
var name: String
}