2016-09-30 142 views
0

我真的不完全理解Swift 3.0 Firebase语法的更新,但大多数情况下从快照的子项中检索值似乎是不可能的。要做到这一点,我用这样的片段:访问儿童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在新雨燕3更新很多限制,而AnyObject不允许值从对象中读取和NSDictionary类型类型也没有孩子。所有帮助非常感谢,谢谢!

+0

什么是快照? – Dravidian

+0

快照是FIRDatasnapshot的类型 –

回答

2

您收到FIRDataSnapshot类型的快照实际上是符合NSObject自定义类,所以只有符合FIRDataSnapshot变量可以访问自定义功能FIRDataSnapshot提供了诸如.children

但是当你访问一个新的变量,其值是snap.value解析为[字符串: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 
      } 
     } 

    }) 
+0

好的!我忽略了第一行中的转换。 –

+0

是的,但一旦我尝试:'如果child.hasChild(“NAME”){}',它说'值类型'NSFastEnumerationIterator.Element'(又名'任何')没有成员'hasChild'' @FrankvanPuffelen @Dravidian –

+0

它提供了转换为AnyObject类型的选项,但稍后会导致歧义。 –