データの書き込み
コレクションのフィールドにはMessages、ドキュメントは固有ID、
ドキュメントフィールドにメッセージデータを入れるとします。
import FirebaseFirestore
...
Firestore.firestore().collection("Messages").document().setData([
"date": Date(),
"senderId": "testId",
"text": "testText",
"userName": "testName"
])
collection("Messages")で以下の画像のようにコレクション名が生成され、
document()のように()内を指定しない場合は固有IDが振られます。
最後にsetDataでメッセージのデータをmap(辞書)で書き込んでいます。
反映されたデータ
データの取得
Firestoreから取得したデータは、扱いやすいように
構造体を型にしてアプリ側で処理をするとします。
struct FirestoreData {
var date: Date?
var senderId: String?
var text: String?
var userName: String?
}
import FirebaseFirestore
...
...
Firestore.firestore().collection("Messages").getDocuments(completion: {
(document, error) in
if error != nil {
print("ChatViewController:Line(\(#line)):error:\(error!)")
} else {
if let document = document {
for i in 0..<document.count {
var storeData = FirestoreData()
storeData.date = (document.documents[i].get("date")! as! Timestamp).dateValue()
storeData.senderId = document.documents[i].get("senderId")! as? String
storeData.text = document.documents[i].get("text")! as? String
storeData.userName = document.documents[i].get("userName")! as? String
self.firestoreData.append(storeData)
print(self.firestoreData)
}
}
}
})
Firestore.firestore().collection("Messages").getDocumentsで
Messagesコレクション配下のドキュメントとそのデータを全て取得します。
ドキュメントは複数返ってくるため、for in文で処理をします。
document.documents[インデックス番号]でドキュメント内のデータにアクセスし、
ドキュメント配下のデータには document.documents[インデックス番号].get()でアクセスします。
get()内にキー名を指定することで、ドキュメント配下のデータを取得することができます。
型はこちら側で明示する必要があります。
注意事項
Firestoreの日付情報は、Date()型で渡してもTimestamp型で返ってくるため、
Timestampにキャストして .dateValue()でDate型に変換する必要があります。