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)
您所指的是所谓的尾随闭包语法。它是一种语法糖,可以使闭包更易于使用。
还有许多其他类型的与闭包相关的语法糖功能,我在此处的回答中对此进行了介绍。
一如既往,我强烈推荐Swift 语言指南,它在解释此类基础知识方面做得很好。
| 归档时间: |
|
| 查看次数: |
2942 次 |
| 最近记录: |