前提・実現したいこと
データベース等から取得したデータを複数の画面で利用したいと思っています。
調べていて、なんとなく下記のようにすればよいのかなとイメージはできたのですが、実際にどのように実装すればよいのかが分かりません。
- クラスを用意してそこに読み込んだデータを初期値として入れる
- 活用する画面のコントローラーで上記を呼び出す?
色々なやり方があるとは思うのですが、それ故、初心者には調べても具体的にどのようなコードを書けばよいのか分からず、なにかヒントを頂けたらと思い質問しました。
備考
データベースはFirestoreを予定していますが、活用する以前に読み込んだデータをどう扱えばよいのかが分からず止まっています。
Firestoreを利用する理由は、データに合わせてリアルタイムにビューを変更したく、初期値からデータが変更になる可能性があることも、どのようにコードを書けばよいのかわからない原因の一つです。
追記
考えるより手を動かしたほうが良いというアドバイスを頂いたので、なんとなくのイメージを自分なりに調べて、ツギハギ状態+エラーが出ている状態ですが、今の状態をたたき台?のつもりで追記しておきます。
Swift
1import Foundation 2import Firebase 3 4class AccountModel { 5 6 static let notificationName = "AccountModelChanged" 7 8 let notificationCenter = NotificationCenter() 9 // 今数値がいくらなのか保持する(データの保持) 10 internal var account: Account? { 11 didSet { 12 // Modelを監視しているコントローラーに変更を通知する 13 notificationCenter.post( 14 name: .init(rawValue: AccountModel.notificationName), 15 object: account 16 ) 17 } 18 } 19 20 init(){ 21 let user = Auth.auth().currentUser 22 let db = Firestore.firestore() 23 db.collection("user").document("(user!.uid)").addSnapshotListener { 24 documentSnapshot, error in 25 26 if let accountValue = documentSnapshot.flatMap({ 27 $0.data().flatMap({ (data) in 28 return Account(dictionary: data) 29 }) 30 }) { 31 self.account = accountValue 32 } else { 33 print("Document does not exist") 34 } 35 } 36 } 37} 38
Swift
1import Foundation 2 3public struct Account: Codable { 4 5 let name: String? 6 let gender: String? 7 let age: String? 8 9 enum CodingKeys: String, CodingKey { 10 case name 11 case gender 12 case age 13 } 14 15}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/04 12:19
2020/11/04 12:20
2020/11/04 12:33
2020/11/04 13:00
2020/11/05 02:43