Swift 3:DispatchQueue.main.async {}和DispatcQueue.main.async(执行:{})之间的区别?

时间:2017-04-11 21:48:08

标签: ios swift3 grand-central-dispatch

两者之间存在非常狭窄的语义差异,我发现自己想知道为什么两种选择都存在。它们在功能上是否有任何不同,或者可能只是另一个的别名?

2 个答案:

答案 0 :(得分:12)

完全没有区别。事实上,它们是完全相同的方法。

编译器,

myQueue.async(execute: { foo() })

完全相同
myQueue.async {
  foo()
}

当任何函数或方法的最后一个参数是函数时,您可以将该参数作为尾随闭包传递,而不是将其传递到参数列表中。这样做是为了使诸如DispatchQueue.async之类的高阶函数更像是语言的一部分,减少语法开销并简化域特定语言的创建。

关于尾随闭包语法here的文档。

顺便说一下,写我的第一个例子的惯用方法是:

myQueue.async(execute: foo)

答案 1 :(得分:2)

您所指的是尾随闭包语法。它是使闭合更容易使用的语法糖。

还有许多与闭包有关的语法糖功能,我在回答here中介绍了这些功能。

与往常一样,我强烈推荐Swift Language guide,它在解释这样的基础知识方面做得很好。