QueryDocumentSnapshotからモデルをインスタンス化していたので、DocumentSnapshotから生成しようとするとエラーが出た。
DocumentSnapshotとQueryDocumentSnapshotの違い
こちらの記事が分かりやすい。
https://note.com/shion_consul/n/nd45e9f385696
DocumentSnapshotは.getDocument()
で取得する単一のデータ。ただし存在の保証はない。
QuerySnapshotはdb.collection("posts").addEventLitener()
などで取得してきたドキュメントの塊で、その一つ一つがQueryDocumentSnapshotである。QueryDocumentSnapshotはQueySnapshotの子なので存在の保証がされているっぽい。
本題
私のケースですとQueryDocumentSnapshotを使ってModelからインスタンスを生成していたのですが、QueryDocumentSnapshotはDocumentSnapshotを継承したクラスだったので以下のようにするとエラーは消えました。
struct Post {
var name: String?
init(document: DocumentSnapshot) {
guard let data = document.data() else { return } // ここはあまり良くない書き方だと思う
if let name = data["name"] as? String {
self.name = name
}
}
}