Firebase访问Swift 3中的快照值错误
我最近升级到SWIFT3,并试图从快照观察事件值访问某些事情时,出现错误。
我的代码:
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 }
错误是围绕上述三个variables,并指出:
types“任何”没有下标成员
任何帮助将非常感激
我认为你可能需要把你的snapshot.value
作为一个NSDictionary
。
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
当Firebase返回数据时, snapshot.value
的types是Any?
所以开发人员可以select将其转换为任何你想要的数据types。 这意味着snapshot.value
可以是从简单的Int到偶函数types的任何东西。
由于我们知道Firebase数据库使用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 } }