我无法理解完成处理程序。
我有一个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语句或任何代码? 谢谢
答案 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
,否则你仍然会遇到同样的问题... 应该使用完成与异步调用结果的范围相同。