【问题标题】:Get data out of array of Firebase snapshots从 Firebase 快照数组中获取数据
【发布时间】:2016-09-17 18:00:40
【问题描述】:

我有一组 Firebase 快照var guardians: Array<FIRDataSnapshot> = []。我想使用这样的循环访问每个快照的子值:

 print(self.guardians)
 for snapshot in self.guardians{
     let guardianID = (snapshot.value as? NSDictionary)?["guardian"] as? NSString

但我的 GuardianID 一直为零。如何从此数组中获取特定的子值?作为参考,这里是 self.guardians 打印到控制台的内容:

[Snap (guardians) {
    "-KQaU9lVcUYzIo52LgmN" =     {
        dependent = sJUCytVIWmX7CgmrypqNai8vGBg2;
        guardian = jY2MtbIw4rQmgcZwTbLXNrL7tDq2;
    };
}]

我正在使用带有 Xcode 8 的 Swift 3。

谢谢!

【问题讨论】:

    标签: arrays swift firebase firebase-realtime-database swift3


    【解决方案1】:

    我不确定是否可以在不知道数组是如何构建的情况下回答这个问题。一个问题是 For-in 循环变量是一个 NSFastEnumerationIterator 所以它需要被向下转换为你想要它成为什么样的“东西”。您可能已经这样做了,因此仅供将来参考。

    话虽如此,我编写了一些代码并对其进行了一些分解 - 也许它会为您指明正确的方向。

    下面的代码通过 .value 读取所有节点,然后遍历快照并将每个子节点作为 FDataSnapshot 存储在一个数组中。然后代码遍历该数组并打印存储在数组中的每个快照中的“守护者”。

    我还包含了您的代码来打印 GuardianID,它也可以正常工作,所以我的猜测是问题在于数组最初是如何填充的或在这一行中

    self.guardians 中的快照

    因为快照是 NSFastEnumerationIterator

    let ref = self.myRootRef.child(byAppendingPath: "guardian_node")!
    
    ref.observe(.value, with: { snapshot in
    
         if ( snapshot!.value is NSNull ) {
              print("not found")
         } else {
    
              var guardianArray = [FDataSnapshot]()
    
              for child in snapshot!.children {
                   let snap = child as! FDataSnapshot //downcast
                   guardianArray.append(snap)
              }
    
              for child in guardianArray {
                   let dict = child.value as! NSDictionary
                   let thisGuardian = dict["guardian"]!
                   print(thisGuardian)
    
                   //your code
                   let guardianID = (child.value as? NSDictionary)?["guardian"] as? NSString
                   print(guardianID!)
              }
         }
    })
    

    *这是 Swift 3 和 Firebase 2.x,但概念是一样的。

    【讨论】:

    • 非常感谢您发布此信息。这很好用!使用for snapshot in self.guardians 和for child in guardianArray 更深入地了解这一点至关重要。从 Parse 转到 Firebase 让我头晕目眩。谢谢你为我打破这个逻辑!
    猜你喜欢
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多