Swift 3嵌套函数与闭包

时间:2016-12-15 23:53:31

标签: swift nested closures

我有一个很大的方法可以进行一些加载和计算,因此它会显示一个活动指示器视图,通知用户应该等待。逻辑非常复杂,因此数据处理可能会破坏或返回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()
    }
}

以完全相同的方式使用,从用户的角度来看完全相同。

那么一种方法与另一种方法之间的实际差异是什么?

1 个答案:

答案 0 :(得分:3)

在这种情况下它们是相同的。在斯威夫特:

  

嵌套函数是具有名称的闭包,可以从其封闭函数中捕获值。

Source

事实上,您也可以这样做:

func foo() {
     print("Foo!")
}
let bar = foo

现在foo()bar()会产生相同的结果。对于任何不带参数的函数都可以这样做。

我不确定编译器如何区分这两者。如果有人有更多相关信息,我会非常感兴趣!

相关问题