尝试从函数内部的 firebase querysnaphsot 完成处理程序中获取 return 值

Trying to return value from firebase querysnaphsot completion handler inside function

我正在尝试 return 从异步代码块(从我的完成处理程序)为我的函数 validateFields() 生成的值,但我不确定如何做到这一点。

func validateFields() -> Bool
{
        //Other else if statements
        //...

        else if !(usernameTextField.text!.isEmpty)
        {
            var retVal = false
            
            isUnique { (bool) in
                retVal = bool
            }
            
            print("THIS IS THE RET VALUE: " + String(retVal))
            //this print statement does not return the correct value            

            if retVal == false { return retVal }
        }
        errorLabel.text = " "
        return true

}

如您所见,它不起作用,我需要在 isUnique 中 return bool 来实现我的整个功能。

您不能存储 isUnique 的关闭结果然后立即 return 它,因为 isUnique 将花费完成任何任务所需的时间。

你想要类似下面的东西,其中 completion 所有 路径上被调用,但只调用一次:

func validateFields(completion: (Bool) -> Void) {
    //Other else if statements
    //...
    if ... {
        /* ... */
    } else if !(usernameTextField.text!.isEmpty) {
        var retVal = false

        isUnique { (bool) in
            print("THIS IS THE RET VALUE: " + String(bool))
            completion(bool)
        }
    } else {
        errorLabel.text = " "
        completion(true)
    }
}

来电者:

validateFields { result in
    print("result: \(result)")
}