ios - 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
}
我究竟做错了什么?
解决方案
由于您从不调用完成处理程序,因此不会调用它。
您需要completion("some string literal or string variable")
从您的foobar
方法中调用。
func foobar(completion: @escaping (_ info: String) -> ()) {
var result = ""
print("this prints too")
completion(result)
}
但请记住,完成处理程序仅在进行一些异步处理时才有用。如果foobar
不异步执行任何操作,则不应将其设置为使用完成处理程序。您只需要一个简单的返回值。
推荐阅读
- javascript - 查找以酶类开头的 div
- mysql - 字段列表中的 MySQL 未知列。触发原因?
- angular - 角度形式验证`min`不起作用
- android - Android 对话框未正确调整大小
- python - 什么时候调用 callable() 仍然会失败?
- javascript - Javascript - 转换隐藏/显示 FX
- vba - 将列表框中的选定行插入工作表
- angular - Angular 6 RxJs:尝试使 obj 可观察以用于其他组件
- html - Bigcommerce 模具附加付款结帐按钮未显示在快速购物车和购物车视图页面上?
- php - 用两条新线代替双倍
不起作用