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:
A better way might be:
The first method requires the
NSEnumeratorto 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 theNSEnumeratorand is likely more efficient.In either case, the objects being enumerated are
FIRDataSnapshotobjects, so you need the casts so that you can access thevalueproperty.Using
for-inloop:Since writing the original answer back in Swift 1.2 days, the language has evolved. It is now possible to use a
for inloop which works directly with enumerators along withcase letto assign the type: