为什么此函数不返回任何内容?

时间:2018-10-09 18:20:10

标签: swift

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”,并且它可以正常工作,它可以正确打印其值。

2 个答案:

答案 0 :(得分:0)

假设Database.observe是异步的,您将返回Estado及其初始值"",因为return Estado行在observe内部实际赋值之前运行关闭。

returnEstado的分配中设置断点,并查看执行顺序。

您需要使用一些异步模式:将闭包传递给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)
}