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

web*_*ode 6 grand-central-dispatch ios swift3

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

Ped*_*lho 13

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

到编译器,

myQueue.async(execute: { foo() })
Run Code Online (Sandbox Code Playgroud)

与...完全相同

myQueue.async {
  foo()
}
Run Code Online (Sandbox Code Playgroud)

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

有一个关于后关闭语法文档在这里.

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

myQueue.async(execute: foo)
Run Code Online (Sandbox Code Playgroud)


Ale*_*ica 3

您所指的是所谓的尾随闭包语法。它是一种语法糖,可以使闭包更易于使用。

还有许多其他类型的与闭包相关的语法糖功能,我在此处的回答中对此进行了介绍。

一如既往,我强烈推荐Swift 语言指南,它在解释此类基础知识方面做得很好。