FIRUserとFIRDatabaseReferenceをとるfailable初期化子を使ってクラスを作成しようとしています。 Firebaseデータベースからデータをダウンロードし、返されたものに基づいて独自の変数を設定します。そうでなければ、イニシャライザは失敗するはずです。Firebase Data Pullからクラスを初期化する
何が起こるかは、データがクロージャーでダウンロードされた後、ダウンロードが起こらなかったかのようにすべてがデフォルト値に戻ります。
私はこのサーバのチャットロジックをクラス初期化子に入れたいと思っています。どのようにしても私はこれを安全に達成することができますか?私はこれまで多くのことを試してきましたが、それを理解することはできません。
init?(from user: FIRUser, withUserReference ref: FIRDatabaseReference){
let userID = user.uid
var init_succeeded = false
//These values don't matter. If the init fails
//It'll return an empty class.
//Yes this is a hack lol
self.incognito = false
self.email = "NO"
self.username = "NOPE"
self.ref = ref
self.fir_user = user
self.mute_all = false
//Getting the information from the database
ref.child(userID).observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
//Unpacking user preferences
self.incognito = (value?["incognito"] as? Bool)!
self.mute_all = (value?["mute_all"] as? Bool)!
self.email = (value?["email"] as? String)!
self.username = (value?["username"] as? String)!
init_succeeded = true
}) { (error) in
print("ERROR : \(error.localizedDescription)")
}
if !init_succeeded { return nil }
}
ありがとうございます! - キーナン
ありがとうございました!最後に、スナップショットをクラス初期化子に渡し、残りの部分を処理させました。再度、感謝します! –