【发布时间】:2018-07-25 12:36:53
【问题描述】:
我基本上想要一个可选的完成处理程序,它没有传回的参数。这是我到目前为止所拥有的,但显然这是错误的。
func refreshAccountData(type:String, completion: (()->(Void))?){
//Network call is made
Alamofire.request... {
completion?()
//Here is where I want to call the optional completion handler
}
}
我不想在完成块中传递任何参数。我只想知道网络调用何时完成,以便刷新 UI。我不想在这里刷新 UI,因为我希望它充当刷新数据的通用函数。我希望完成处理程序是可选的原因是因为有时我在刷新完成后不需要做任何事情。
我也很困惑@escaping 的含义。当我做这样的事情时,我通常会拥有它,但任何清晰都会很棒。我在网上做了一些关于它的功课,但没有找到我真正得到的东西。
【问题讨论】:
-
这有什么问题?这并不明显,我只是使用了相同的声明而没有编译器错误..
-
真的吗?这是最好的方法吗?我不必担心与转义有关的任何事情,也无需强制打开
completion?()。我相信 Xcode 让我解开completion!() -
为什么不简单地
func refreshAccountData(type:String, completion: @escaping ()->()){直接打电话给completion()?如果您不想执行任何操作,只需在调用您的方法时传递一个空闭包 -
另一种选择是为你的完成处理程序设置一个默认值,这样你就可以在调用你的方法时简单地省略闭包
func refreshAccountData(type:String, completion: @escaping (()->()) = {}){