我有一系列 Firebase 快照var guardians: Array<FIRDataSnapshot> = []
。我想使用如下循环访问每个快照的子值:
print(self.guardians)
for snapshot in self.guardians{
let guardianID = (snapshot.value as? NSDictionary)?["guardian"] as? NSString
但我的监护人 ID 一直为零。如何从该数组中获取特定的子值?作为参考,以下是 self.guardians 打印到控制台的内容:
[Snap (guardians) {
"-KQaU9lVcUYzIo52LgmN" = {
dependent = sJUCytVIWmX7CgmrypqNai8vGBg2;
guardian = jY2MtbIw4rQmgcZwTbLXNrL7tDq2;
};
}]
我正在使用 Swift 3 和 Xcode 8。
Thanks!
我不确定在不知道数组是如何构建的情况下是否可以回答这个问题。一个问题是 For-in 循环变量是一个 NSFastEnumerationIterator,因此需要将其向下转换为您想要的“事物”类型。您可能已经这样做了,因此这仅供将来参考。
话虽这么说,我编写了一些代码并对其进行了一些分解 - 也许它会为您指明正确的方向。
下面的代码通过 .value 读取所有节点,然后迭代快照并将每个子节点作为 FDataSnapshot 存储在数组中。然后代码迭代该数组并打印数组中存储的每个快照的“监护人”。
我还包含了打印监护人 ID 的代码,它也有效,所以我猜测问题在于数组最初填充的方式或在这一行中
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,但概念是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)