ios - 在 Firebase 中迭代快照子项

标签 ios swift firebase nsenumerator

我有一个包含多个对象的 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) // I got the expected number of items
    for rest in snapshot.children { //ERROR: "NSEnumerator" does not have a member named "Generator"
       println(rest.value)     
     }
 })

看来 Swift 迭代 Firebase 返回的 NSEnumerator 对象存在问题。

非常欢迎帮助。

最佳答案

如果我读了documentation没错,这就是你想要的:

var ref = Firebase(url: MY_FIREBASE_URL)
ref.observeSingleEvent(of: .value) { snapshot in
    print(snapshot.childrenCount) // I got the expected number of items
    for rest in snapshot.children.allObjects as! [FIRDataSnapshot] {
       print(rest.value)     
    }
}

更好的方法可能是:

var ref = Firebase(url: MY_FIREBASE_URL)
ref.observeSingleEvent(of: .value) { snapshot in
    print(snapshot.childrenCount) // I got the expected number of items
    let enumerator = snapshot.children
    while let rest = enumerator.nextObject() as? FIRDataSnapshot {
       print(rest.value)     
    }
}

第一个方法需要NSEnumerator返回所有对象的数组,然后可以用通常的方式枚举这些对象。第二种方法从 NSEnumerator 一次获取一个对象,并且可能更有效。

无论哪种情况,所枚举的对象都是 FIRDataSnapshot 对象,因此您需要进行强制转换才能访问 value 属性。

<小时/>

使用for-in循环:

自从在 Swift 1.2 中写出原始答案以来,该语言已经发生了演变。现在可以使用 for in 循环直接与枚举器一起使用,并结合 case let 来分配类型:

var ref = Firebase(url: MY_FIREBASE_URL)
ref.observeSingleEvent(of: .value) { snapshot in
    print(snapshot.childrenCount) // I got the expected number of items
    for case let rest as FIRDataSnapshot in snapshot.children {
       print(rest.value)     
    }
}

关于ios - 在 Firebase 中迭代快照子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35006333/

相关文章:

ios - Swift 和 CoreData 使用自定义类作为可转换对象

ios - XCode 8.1 更改了 Storyboard View 中的常量

ios - 我正在尝试从文档目录访问视频,但出现错误 "No such file or directory"

javascript - 随着时间的推移,firebase 的存在变得越来越错误

c# - Firebase:在 Windows Phone 上使用 Accept: text/event-stream

javascript - Angular 和 Ionic 4 - 等待和异步未按预期工作

ios - 如何直接从浏览器安装 iOS 应用程序?

iOS黑暗模式。用户界面样式在进入后台时来回更改

SwiftUI 预览版不适用于 Core Data

ios - 使用来自另一个类方法的参数调用类方法