Swift 从子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[

我真的不太理解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["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的选项,但这导致了歧义。我的回答只是解释了基本概念,用于检索值——答案更新了。