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)