Open11
SwiftUI&Firebase
SwiftUIとFirebaseの連携をまとめていく。
Cloud Firestore は、クラウドホストの NoSQL データベース.
NoSQLってなんだ・・・
ここしっかり読んでおこう。
iOS以外に、WebとかAndroidとかにも使えるから汎用性が高い。
ドキュメントに使える型をみている。
ブール値、数値、文字列、地理的位置、バイナリ blob、タイムスタンプ等がサポートされている。
マップを使うとネストしたオブジェクトも格納できる。
class alovelace
name :
first : "Ada"
last : "Lovelace"
born : 1815
コレクションの中にドキュメントがある。包含関係をしっかり意識する。
Firestoreはスキマーレスである。
スキマーレスとは、スキーマ構造が自由であること。
自由にデータを格納できるが、柔軟性に富んでいて便利な反面、当初想定されていない構造のデータが誤って登録される恐れもある。
リファレンスとは、場所を参照すること。
リファレンスはそこにデータが存在するかどうかにかかわらず作成することができる。
リファレンスを作成してもネットワーク操作(DB操作)は実行されない。
let alovelaceDocumentRef = db.collection("users").document("alovelace")
単一データ取得の仕方
let docRef = db.collection("cities").document("SF")
docRef.getDocument { (document, error) in
if let document = document, document.exists {
let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
print("Document data: \(dataDescription)")
} else {
print("Document does not exist")
}
}
where条件(首都のみ)でデータ取得。
db.collection("cities").whereField("capital", isEqualTo: true)
.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
}
}
}
where条件がないと、cities collection配下の全部のdocumentsを取得する。
db.collection("cities").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())")
}
}
}