Swift 从子Firebase访问值
我真的不太理解Swift 3.0 Firebase语法的更新,但最重要的是,从快照的子项检索值似乎是不可能的。为此,我使用如下代码段:Swift 从子Firebase访问值,swift,firebase,firebase-realtime-database,swift3,Swift,Firebase,Firebase Realtime Database,Swift3,我真的不太理解Swift 3.0 Firebase语法的更新,但最重要的是,从快照的子项检索值似乎是不可能的。为此,我使用如下代码段: if let snapVal = snapshot.value as? [String: AnyObject] { for c in snapshot.children { let cx = (c as! AnyObject) let name = cx[
if let snapVal = snapshot.value as? [String: AnyObject] {
for c in snapshot.children {
let cx = (c as! AnyObject)
let name = cx["NAME"] as! String
}
}
我对此采取了许多方法,但FIRDatabaseSnapshot在新的Swift 3更新中有许多限制,并且AnyObject不允许从对象读取值,类似NSDictionary的类型也没有子类型。非常感谢您的帮助,谢谢 您收到的类型为
FIRDataSnapshot
的快照实际上是一个符合NSObject
的自定义类,因此只有符合FIRDataSnapshot
的变量才能访问FIRDataSnapshot
提供的自定义函数,例如.children
但是当您访问一个新变量时,它的值是snap.value
解析为[String:AnyObject],基本上它变成了一个NSDictionary,并且NSDictionary没有任何参数。children
FIRDatabase.database().reference().child("your_Ref").observeSingleEvent(of: .value, with: {(snap) in
for each in snap.children{
print(each)
}
if let snapDict = snap.value as? [String:AnyObject]{
for each in snapDict{
let keyID = each.key
let childValue = each.value["NAME"] as! String
}
}
})
您收到的类型为
FIRDataSnapshot
的快照实际上是一个符合NSObject
的自定义类,因此只有符合FIRDataSnapshot
的变量才能访问FIRDataSnapshot
提供的自定义函数,例如.children
但是当您访问一个新变量时,它的值是snap.value
解析为[String:AnyObject],基本上它变成了一个NSDictionary,并且NSDictionary没有任何参数。children
FIRDatabase.database().reference().child("your_Ref").observeSingleEvent(of: .value, with: {(snap) in
for each in snap.children{
print(each)
}
if let snapDict = snap.value as? [String:AnyObject]{
for each in snapDict{
let keyID = each.key
let childValue = each.value["NAME"] as! String
}
}
})
什么是快照?快照的类型是FirDataSnapshot什么是快照?快照的类型是FirDataSnapshot很好!我忽略了第一行中的转换。是的,但一旦我尝试:
如果child.hasChild(“NAME”){}
,它会说类型为“NSFastEnumerationIterator.Element”(又名“Any”)的值没有成员“hasChild”
@FrankvanPuffelen@DravidianIt提供了转换为类型AnyObject的选项,但这导致了歧义。我的回答只是解释了基本的概念,用于检索值-答案更新。很好!我忽略了第一行中的转换。是的,但一旦我尝试:如果child.hasChild(“NAME”){}
,它会说类型为“NSFastEnumerationIterator.Element”(又名“Any”)的值没有成员“hasChild”
@FrankvanPuffelen@DravidianIt提供了转换为类型AnyObject的选项,但这导致了歧义。我的回答只是解释了基本概念,用于检索值——答案更新了。