如何在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应与异步调用结果在同一范围内使用。
非常感谢,它的工作原理。你的笔记也有帮助,因为我完成了你预期的错误。现在工作正常。 – standousset
不错。不客气,我很高兴能够提供帮助。 – Moritz