如何在IBAction中呼叫其他人之前完成某项功能?

时间:2016-02-29 14:37:40

标签: swift asynchronous swift2 completionhandler

我无法理解完成处理程序。

我有一个textFieldEditingDidChange IBAction,它首先在文本字段输入上调用 verify()函数,然后在apply返回的布尔值上调用if语句问题是if语句在verify()完成之前开始

以下是代码:

@IBOutlet weak var myTextField: UITextField!

@IBAction func myTextFieldEditingDidChange(sender: AnyObject) {

        let yo = verify(myTextField.text!)            
        print("\(yo)") // it always prints "true" because verify hasn't finished

}


func verify(myText: String) -> Bool {
    var result = true
    // some code that fetches a string "orlando" on the server
    if myText == "orlando" {
         result = false
    }
    return result
}

如何在验证有时间执行后发生print语句或任何代码? 谢谢

1 个答案:

答案 0 :(得分:3)

这样的事情:

func verify(myText: String, completion: (bool: Bool)->()) {
    var result = true
    // some code that fetches a string "orlando" on the server
    if myText == "orlando" {
        result = false
    }
    completion(bool: result)
}

你在IBAction中这样称呼它,带有一个尾随的闭包:

verify(myTextField.text!) { (bool) in
    if bool {
        // condition in `verify()` is true
    } else {
        // condition in `verify()` is false
    }
}

注意:你说"一些取代字符串的代码" orlando"在服务器"上,小心不要在异步调用之后设置新的completion ,否则你仍然会遇到同样的问题... 应该使用完成与异步调用结果的范围相同。