我正在尝试实现一个用户注册系统,我需要知道一个用户 ID(随机生成)是否已经分配给另一个用户。为此,我连接了我的 Firebase 数据库并使用 observer()
方法检查生成的 ID 是否可用。
但是,由于 Firebase 数据库查询是异步运行的,而且我只能在查询返回时知道结果,所以我无法在调用方法中使用正确的返回值。
我的做法是
repeat {
id = generateUniqueId()
check availability
} while (id is not unique)
我的实现是
var id:String
var test = true
repeat {
id = generateId()
ref.child("\(databaseReferenceName)").observe(.value) { (snapshot) in
test = snapshot.hasChild("\(id)")
}
} while (test == true)
即使 hasChild()
方法将 test
变量设置为 false
,此循环仍会继续运行。
如何更改代码以便能够捕获 test
变量的正确值?
我正在使用 Swift 4.1
谢谢
最佳答案
你没有说,但我假设你使用的 observe() 函数是异步的,并且会在工作完成之前返回。正如 PaulW11 所说,您需要在完成处理程序中触发下一轮:
func observeChildren() {
var id:String
id = generateId()
ref.child("\(databaseReferenceName)").observe(.value) { (snapshot) in
if snapshot.hasChild("\(id)") {
observeChildren() //recursively call observeChildren again.
}
}
关于ios - Swift - 在重复循环中使用闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52235408/