Swift 3 嵌套函数与闭包

标签 swift nested closures

我有一个大型方法可以进行一些加载和计算,因此它会显示一个事件指示器 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.

Source

其实你也可以这样做:

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

现在 foo()bar() 会产生相同的结果。这可以用于任何不接受参数的函数。

我不确定编译器如何/是否区分这两者。如果有人对此有更多信息,我将非常感兴趣!

关于Swift 3 嵌套函数与闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41175245/

相关文章:

swift - Firebase Remote Config/Analytics setUserProperty 条件不执行任何操作

python - 通过嵌套字典键获取唯一列表项

css - 嵌套 DIV - 嵌套 DIV 不占用高度?

Swift - @escaping 和捕获列表说明

ios - 试图用 Apple Map 填满屏幕

ios - 针对 TableView 上没有数据创建警报或标签文本。 swift

python - 如何从嵌套列中提取 json 到数据框

JavaScript YUI3 使用全局变量?

Javascript/Node : Passed in object seems to overwrite "self" - closure issue?

ios - 首次加载时在 Swift/Xcode 中调用条款和条件