こんにちは。virapture株式会社でCEOしながらラグナロク株式会社でもCKOとして働いているもぐめっとです。
本日はswiftとFirestoreで使う@DocumentIdについて皆が知らないであろう機能を発見したので共有します。
@DocumentIDとは?
そもそも@DocumentIDってなんやねんというお話をすると、Decodeするときに自動的にidを付加するという便利機能になります。
import FirebaseFirestoreSwift
struct UserModel: Codable {
@DocumentID var documentID: String?
let username: String
}
Firestore.firestore().document("users/mogmet").getDocument { snapshot, error in
let user = try? snapshot?.data(as: UserModel.self, with: .estimate)
//これだけでuser.documentIDにdocumentIdが入っている
}
参考↓
隠された便利機能ってなに?
もぐめっとは、名前からしてDocumentIDとあるのでIDしか付与できないと思ってました。
しかし、DocumentIDの処理をみると、DocumentReferenceを値として持ってるように見えました。
そのため、ためしにこう書いてみました。
import FirebaseFirestoreSwift
struct UserModel: Codable {
@DocumentID var documentID: String?
@DocumentID var reference: DocumentReference?
let username: String
}
すると、DocumentReferenceの値もちゃんと保管されていることを確認できました!!!
これはすごい!便利!!!
補足
ちなみにこういう書き方もできます。
Firestore.firestore().document("users/mogmet").getDocument { snapshot, error in
let user = try? Firestore.Decoder().decode(UserModel.self, from: snapshot.data(with: .estimate), in: snapshot.reference)
}
この場合はin句でreferenceを入れてあげないと@DocumentIDが動かないので注意ください。
(でも最初の書き方のほうがシンプルなのでconverterを指定しないかぎりはこっちの書き方は使わなそう)
まとめ
@DocumentIDはDocumentReferenceもいい感じに保管してくれる便利機能でした!!
最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!
他にもCameconやOffchaといったサービスも作ってるのでよかったら使ってね!
また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。
ラグナロクでもエンジニアやデザイナーのメンバーを募集しています!!楽しくぶち上げたい人はぜひお話ししましょう!!