func RevisarConectividad() -> String
{
var Estado = ""
let Referencia = Database.database().reference(withPath: ".info/connected")
Referencia.observe(.value, with:
{ snapshot in
if snapshot.value as? Bool ?? false
{
Estado = "Conectado"
}
else
{
Estado = "NoConectado"
}
print(Estado)
})
print("Estado:" + " " + Estado)
return Estado
}
我这样称呼它:
let Estado = RevisarConectividad()
但是出于某种原因,看来Estado从未采用这两个字符串中的任何一个。无论如何,我在封盖内打印“ Estado”,并且它可以正常工作,它可以正确打印其值。
答案 0 :(得分:0)
假设Database.observe
是异步的,您将返回Estado
及其初始值""
,因为return Estado
行在observe
内部实际赋值之前运行关闭。
在return
和Estado
的分配中设置断点,并查看执行顺序。
您需要使用一些异步模式:将闭包传递给RevisarConectividad
以便在您拥有数据,委托协议或某些属性的KVO时被调用...
答案 1 :(得分:0)
“观察”是异步功能,当您返回“ estado”时,该值尚未设置。您可以传递回调,然后在函数中调用它。
func RevisarConectividad(completion: @escaping (_ state:String) -> ())
{
var Estado = ""
let Referencia = Database.database().reference(withPath: ".info/connected")
Referencia.observe(.value, with:
{ snapshot in
if snapshot.value as? Bool ?? false
{
Estado = "Conectado"
}
else
{
Estado = "NoConectado"
}
completion(Estado)
})
}
然后:
RevisarConectividad { (state) in
print(state)
}