在Swift中重复使用快照子项(Firebase) [英] Iterate over snapshot children in Swift (Firebase)
问题描述
我有一个包含多个对象的Firebase资源,我想用Swift对它们进行迭代。
我期望的工作如下(根据Firebase文档)
https://www.firebase.com/docs/ios-api/Classes/FDataSnapshot.html#//api/name/children
var ref = Firebase(url:MY_FIREBASE_URL)
ref.observeSingleEventOfType(.Value,withBlock:{snapshot in
println(snapshot.childrenCount)//我在snapshot.children {//错误:NSEnumerator没有一个名为Generator的成员
println (rest.value)
}
})
Swift迭代了由Firebase返回的NSEnumerator对象的问题。
非常欢迎帮助。 如果我阅读 firebasedatabase / api / reference / Classes / FIRDataSnapshot#childrenrel =noreferrer> documentation right,这就是你想要的:
var ref = Firebase(url:MY_FIREBASE_URL)
pre>
ref.observeSingleEventOfType(.Value,withBlock:{snapshot in
println(snapshot.childrenCount)//我得到期望的项目数
在snapshot.children.allObjects中作为[FIRDataSnapshot] {
println(rest.value)
}
})
更好的方法可能是:
$ p $ lt; code> var ref = Firebase (url:MY_FIREBASE_URL)
ref.observeSingleEventOfType(.Value,withBlock:{snapshot in $ b $ println(snapshot.childrenCount)//我得到期望的项目数
let enumerator = snapshot.children
,而让休息= enumerator.nextObject()作为?FIRDataSnapshot {
println (rest.value)
}
})
第一种方法需要 NSEnumerator
返回所有对象的数组,然后按照通常的方式枚举。第二种方法从 NSEnumerator
一次获取一个对象,并且可能更有效率。
无论哪种情况,枚举的对象是 FIRDataSnapshot
对象,所以您需要强制转换以便可以访问值
属性。 / p>
I have a Firebase resource that contains several objects and I would like to iterate over them using Swift.
What I expected to work is the following (according to the Firebase documentation)
https://www.firebase.com/docs/ios-api/Classes/FDataSnapshot.html#//api/name/children
var ref = Firebase(url:MY_FIREBASE_URL)
ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
println(snapshot.childrenCount) // I got the expected number of items
for rest in snapshot.children { //ERROR: "NSEnumerator" does not have a member named "Generator"
println(rest.value)
}
})
So it seems there is a problem with Swift iterating over the NSEnumerator object returned by Firebase.
Help is really welcome.
If I read the documentation right, this is what you want:
var ref = Firebase(url:MY_FIREBASE_URL)
ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
println(snapshot.childrenCount) // I got the expected number of items
for rest in snapshot.children.allObjects as [FIRDataSnapshot] {
println(rest.value)
}
})
A better way might be:
var ref = Firebase(url:MY_FIREBASE_URL)
ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
println(snapshot.childrenCount) // I got the expected number of items
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? FIRDataSnapshot {
println(rest.value)
}
})
The first method requires the NSEnumerator
to return an array of all of the objects which can then be enumerated in the usual way. The second method gets the objects one at a time from the NSEnumerator
and is likely more efficient.
In either case, the objects being enumerated are FIRDataSnapshot
objects, so you need the casts so that you can access the value
property.
这篇关于在Swift中重复使用快照子项(Firebase)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!