2016-09-30 183 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類型的選項,但稍後會導致歧義。 –