我最近升级到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
}
错误是围绕上述三个变量并指出:
键入'任何'没有下标成员
非常感谢任何帮助
答案 0 :(得分:14)
我认为您可能需要将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
答案 1 :(得分:8)
当Firebase返回数据时,snapshot.value
的类型为Any?
,因此开发人员可以选择将其转换为您想要的任何数据类型。这意味着snapshot.value
可以是从简单的Int到偶数函数类型的任何东西。
因为我们知道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
}
}