当前,我有一个Firebase实时数据库,其中包含在线用户列表。
在我的iOS应用程序中,我具有一项功能,可从数据库加载在线用户的队列。
当有0位用户在线时,我想要发生的事情是让应用程序等待,直到Firebase状态更改并且用户在线,然后返回用户的ID(user.id)。
我的数据库的结构非常简单:
{
"online" : {
"user1" : val1,
"user2" : val2,
"user3" : val3
}
}
我正在尝试实现的功能:
let rtdbRef = Database.database().reference(withPath: "online")
userQueue: [String] = []
func nextUserInQueue() -> String {
// once we exhaust our queue, load up more users
if (self.userQueue.count == 0) {
// need to wait until a user goes online, then put them in the queue
}
}
答案 0 :(得分:2)
根据我几年前写的gist,您可以使用以下方法等待节点具有值:
var handle: UInt!
handle = rtdbRef.observeEventType(.Value, withBlock: { snapshot in
if snapshot.exists() {
print("The value is now \(snapshot.value)")
ref.removeObserverWithHandle(handle)
}
})