Firebase Realtime DatabaseでqueryOrdered
メソッドで並べ替えられたデータをDataEventType.value
で取得する。
observe
メソッドでDataEventType.childAdded
などのchildイベントをリッスンすると子要素ごとにコールバックが発生してしまう。
DataEventType.value
ではすべての子要素を含んだsnapshotでコールバックが発生する。
並べ替えられた子要素にはDataSnapshot.children: NSEnumerator
プロパティでアクセスできる。DataSnapshot.value
の子要素は並べ替えられていない。
example
Database.database().reference()
.child("users").child(user.uid)
.queryOrdered(byChild: "created")
.observe(DataEventType.value) { (snapshot) in
// 子要素は並べ替えられていない
print(snapshot.value)
// 並べ替えられた順に子要素が反復される
for case let child as DataSnapshot in snapshot.children {
print(child.value)
}
}
import Firebase
extension DataSnapshot {
var childSnapshots: LazyMapSequence<NSEnumerator, DataSnapshot> {
return self.children.lazy.map { $0 as! DataSnapshot}
}
}