我有一个很大的方法可以进行一些加载和计算,因此它会显示一个活动指示器视图,通知用户应该等待。逻辑非常复杂,因此数据处理可能会破坏或返回4个位置(一切都在闭包上完成)。无论如何,我不想重复这段代码:
DispatchQueue.main.async {
activityView.hide()
activityView.removeFromSuperview()
}
在4个地方,所以我想我会写一个嵌套函数:
func removeActivityView() {
DispatchQueue.main.async {
activityView.hide()
activityView.removeFromSuperview()
}
}
然后我意识到在Swift中我也可以这样做:
let removeActivityView = {
DispatchQueue.main.async {
activityView.hide()
activityView.removeFromSuperview()
}
}
以完全相同的方式使用,从用户的角度来看完全相同。
那么一种方法与另一种方法之间的实际差异是什么?
答案 0 :(得分:3)
在这种情况下它们是相同的。在斯威夫特:
嵌套函数是具有名称的闭包,可以从其封闭函数中捕获值。
事实上,您也可以这样做:
func foo() {
print("Foo!")
}
let bar = foo
现在foo()
和bar()
会产生相同的结果。对于任何不带参数的函数都可以这样做。
我不确定编译器如何区分这两者。如果有人有更多相关信息,我会非常感兴趣!