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

Posted

技术标签:

【中文标题】在 IBAction 中调用其他函数之前,如何使函数完成?【英文标题】:How can I make a function complete before calling others in an IBAction? 【发布时间】:2016-02-29 14:37:39 【问题描述】:

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

我有一个 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

如何在验证已计时执行后进行打印语句或任何代码? 谢谢

【问题讨论】:

【参考方案1】:

类似这样的:

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

【讨论】:

非常感谢,它有效。你的笔记也很有帮助,因为我完全按照你的预期做了错误。现在工作正常。

以上是关于在 IBAction 中调用其他函数之前,如何使函数完成?的主要内容,如果未能解决你的问题,请参考以下文章

如何从objective-c中的代码调用点击手势IBAction

从代码中调用按钮单击的函数

从 NSTimer 函数调用 UIButton @IBAction [关闭]

从 xib 内的按钮单击调用 IBAction 时出错

子类化 NSControl,在 Swift 中不调用 IBAction

iOS 9 中未调用 UITableViewCell 中的 IBAction