Swift 3:DispatchQueue.main.async{}和DispatcQueue.main.async(execute:{})的区别?
Swift 3: Difference between DispatchQueue.main.async{} and DispatcQueue.main.async(execute:{})?
两者之间的语义差异非常小,我发现自己想知道为什么这两个选项都存在。它们在功能上有什么不同,或者一个可能只是另一个的别名?
完全没有区别。事实上,它们是完全相同的方法。
编译器,
myQueue.async(execute: { foo() })
与
完全一样
myQueue.async {
foo()
}
当任何函数或方法的最后一个参数是函数时,您可以将该参数作为尾随闭包传递,而不是将其传递到参数列表中。这样做是为了使 DispatchQueue.async
等高阶函数更像是语言的一部分,减少句法开销并简化领域特定语言的创建。
有关于尾随闭包语法的文档 here。
顺便说一句,编写我的第一个示例的惯用方式是:
myQueue.async(execute: foo)
您指的是尾随闭包语法。它是使闭包更易于使用的语法糖。
还有许多其他类型的与闭包相关的语法糖功能,我在我的回答中介绍了这些 。
一如既往,我强烈推荐 Swift Language guide,它很好地解释了像这样的基础知识。
两者之间的语义差异非常小,我发现自己想知道为什么这两个选项都存在。它们在功能上有什么不同,或者一个可能只是另一个的别名?
完全没有区别。事实上,它们是完全相同的方法。
编译器,
myQueue.async(execute: { foo() })
与
完全一样myQueue.async {
foo()
}
当任何函数或方法的最后一个参数是函数时,您可以将该参数作为尾随闭包传递,而不是将其传递到参数列表中。这样做是为了使 DispatchQueue.async
等高阶函数更像是语言的一部分,减少句法开销并简化领域特定语言的创建。
有关于尾随闭包语法的文档 here。
顺便说一句,编写我的第一个示例的惯用方式是:
myQueue.async(execute: foo)
您指的是尾随闭包语法。它是使闭包更易于使用的语法糖。
还有许多其他类型的与闭包相关的语法糖功能,我在我的回答中介绍了这些
一如既往,我强烈推荐 Swift Language guide,它很好地解释了像这样的基础知识。