Swift:完成关闭永远不会执行?

时间:2018-05-23 02:44:50

标签: ios swift asynchronous closures

所以基本上,我试图找回函数foobar返回的字符串。最初,我曾尝试从foobar返回字符串,但swift保持早期/异步返回?来自foobar。代码如下:

@IBAction func bAction(_ sender: UIButton) {
    print("this prints")
    foobar(completion: { (info) in
        print("this does not print")
    })
}

func foobar(completion: @escaping (_ info: String) -> ()) {
    var info = ""
    //insert code here
    print("this prints too")
    //insert more code here
}

我做错了什么?

1 个答案:

答案 0 :(得分:7)

由于您从未调用完成处理程序,因此不会调用它。

您需要在completion("some string literal or string variable")方法中致电foobar

func foobar(completion: @escaping (_ info: String) -> ()) {
    var result = ""

    print("this prints too")

    completion(result)
}

但请记住,只有在进行某些异步处理时,完成处理程序才有用。如果foobar没有异步执行任何操作,那么您不应该将其设置为使用完成处理程序。您只需要一个简单的返回值。