首页 > 解决方案 > Swift:完成关闭永远不会执行?

问题描述

所以基本上,我试图取回函数 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
}

我究竟做错了什么?

标签: iosswiftasynchronousclosures

解决方案


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

您需要completion("some string literal or string variable")从您的foobar方法中调用。

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

    print("this prints too")

    completion(result)
}

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


推荐阅读