我有一个函数,它在调用firebase数据库方面有一个函数。Swift评估函数的顺序是什么?
内部函数设置包装函数的变量的值,但我的输出不会注册它。调试时,它看起来像这样以相反的顺序发生。我对swift和firebase很陌生,所以我只是想让我的脑袋围绕这个。
这是我的功能和输出。
func checkIfUsernameExists(inUsername: String) -> String{
var aString = "false"
let ref = FIRDatabase.database().reference()
ref.child("-KohvyrIikykRsOP0XCx").observeSingleEvent(of: .value , with: {(snapshot) in
if snapshot.hasChild(self.username.text!){
print ("*** username already exists")
aString = "true"
}
})
print ("*** value of aString is: ", aString)
return aString
}
输出为:
*** value of aString is: false
*** username already exists
编辑:
我措辞,我的问题糟糕,我认为。
我的意思是要怎么才能在处理收集到的信息之前从Firebase获取回调。我已经反弹,所有博客都指向Async,GCD和Completion处理程序。没有哪一个似乎工作,或者很容易让noob得到他们的头。
不用说,我在这里找到了我的答案。
Firebase Swift 3 Completion handler Bool
这是我用什么:
func checkIfUsernameExists(userid: String, completionHandler: @escaping ((_ exist : Bool) -> Void)) {
let ref = FIRDatabase.database().reference()
ref.child("-KohvyrIikykRsOP0XCx").observeSingleEvent(of: .value , with: {(snapshot) in
if snapshot.hasChild(self.username.text!){
self.usernameCheck = "true"
completionHandler(true)
}
else {
self.usernameCheck = "false"
completionHandler(true)
}
})
}
对异步方法调用做一些研究。 – rmaddy
我可以找到这个博客https://medium.com/@wilson.balderrama/how-to-make-a-async-calls-in-serial-in-swift-3-1debc21ff3c4和一些叫异步,但我是两者都失败了。可以哟链接和例子? – Mokadillion
[从块内部返回方法对象](https:// stackoverflow。com/questions/22267865/returns-method-object-from-inside-block) –