我有一个大型方法可以进行一些加载和计算,因此它会显示一个事件指示器 View 来通知用户他们应该等待。逻辑非常复杂,所以有 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()
}
}
以完全相同的方式使用并且从用户的角度来看完全相同。
那么,一种方法与另一种方法之间的实际区别是什么?
最佳答案
在这种情况下它们是相同的。在 Swift 中:
Nested functions are closures that have a name and can capture values from their enclosing function.
其实你也可以这样做:
func foo() {
print("Foo!")
}
let bar = foo
现在 foo()
和 bar()
会产生相同的结果。这可以用于任何不接受参数的函数。
我不确定编译器如何/是否区分这两者。如果有人对此有更多信息,我将非常感兴趣!
关于Swift 3 嵌套函数与闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41175245/