如何在IBAction中调用其他函数之前完成一个函数?

问题描述:

我无法理解完成处理程序。如何在IBAction中调用其他函数之前完成一个函数?

我有一个textFieldEditingDidChange IBAction为调用首先验证()在文本框输入功能,那么如果返回的布尔声明适用。 问题是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 
} 

我怎样才能使打印语句,或任何代码,恰巧后验证已定时执行? 感谢

事情是这样的:

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异步调用,否则你仍然会遇到同样的问题... 完成s应与异步调用结果在同一范围内使用。

+0

非常感谢,它的工作原理。你的笔记也有帮助,因为我完成了你预期的错误。现在工作正常。 – standousset

+0

不错。不客气,我很高兴能够提供帮助。 – Moritz