我有一系列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;
};
}]
我正在使用Swift 3和Xcode 8。
谢谢!
答案 0 :(得分:1)
我不确定在不知道数组是如何构建的情况下是否可以回答这个问题。一个问题是For-in循环变量是一个NSFastEnumerationIterator,因此它需要向下转换为什么样的东西&#39;你想要它。你可能已经这样做了,这只是为了将来参考。
话虽这么说,我制作了一些代码并将其分解了一些 - 也许它会指向正确的方向。
下面的代码通过.value读入所有节点,然后遍历快照并将每个子节点存储在数组中作为FDataSnapshot。然后代码迭代该数组并打印出监护人&#39;来自存储在数组中的每个快照。
我还包含了你的代码来打印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,但概念是一样的。