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

两者之间的语义差异很窄,我发现自己想知道为什么两种select都存在。 他们在function上有什么不同,或者只是一个别名?

你所指的是被称为尾随闭包语法 。 这是一个使闭包更容易处理的语法糖。

还有很多其他types的closures封闭的语法糖的function,我在这里回答。

和往常一样,我强烈推荐Swift语言指南 ,它很好地解释了这样的基础知识。

根本没有区别。 事实上,他们是一样的方法。

对编译器来说,

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

是完全一样的

 myQueue.async { foo() } 

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

这里有跟踪闭包语法的文档。

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

 myQueue.async(execute: foo)