2016-11-12 12 views
4

最近swift 3にアップグレードされ、スナップショット監視イベント値から特定のものにアクセスしようとするとエラーが発生しています。Firebase Swiftでのスナップショット値エラーへのアクセス3

マイコード:

ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in 

    let username = snapshot.value!["fullName"] as! String 
    let homeAddress = snapshot.value!["homeAddress"] as! [Double] 
    let email = snapshot.value!["email"] as! String 
} 

エラーが上記で述べた三つの変数の周りにあると述べている:

タイプ「どれが」すべてのヘルプははるかに高く評価されるだろう

何の添字のメンバーを持っていないが

答えて

11

snapshot.valueNSDictionaryとしてください。

ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in 

    let value = snapshot.value as? NSDictionary 

    let username = value?["fullName"] as? String ?? "" 
    let homeAddress = value?["homeAddress"] as? [Double] ?? [] 
    let email = value?["email"] as? String ?? "" 

} 

あなたはfirebaseマニュアルのを見てとることができます。https://firebase.google.com/docs/database/ios/read-and-write

7

Firebaseがデータを返すと、snapshot.valueは、開発者として、あなたが望むどんなデータ型にキャストするように選択することができますようにタイプAny?です。つまり、snapshot.valueは、単純なInt型から偶数型の関数型まで、何でも構いません。

Firebase DatabaseはJSONツリーを使用していることがわかっています。キーと値のペアリングがかなりの場合は、snapshot.valueを次のように辞書にキャストする必要があります。

ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in 

    if let firebaseDic = snapshot.value as? [String: AnyObject] // unwrap it since its an optional 
    { 
     let username = firebaseDic["fullName"] as! String 
     let homeAddress = firebaseDic["homeAddress"] as! [Double] 
     let email = firebaseDic["email"] as! String 

    } 
    else 
    { 
     print("Error retrieving FrB data") // snapshot value is nil 
    } 
} 
関連する問題