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())")
        }
    }
}