Swift中闭包和回调之间的区别是什么?

时间:2016-04-08 12:55:05

标签: swift callback closures

我被问到Objective C块是否更像是闭包或回调。但是,回调的定义看起来几乎与闭包相同,至少在这个例子中借用了http://swiftspace.org/callback-function-in-swift/

func mainFunction(callback: () -> Void) {

   // some code
   callback()   // call the callback function
}

在编程语言指南(Swift 2.2)中,很少提及回调,这一个值得注意的例外是回调听起来像一种闭包:

  

“当一个闭包的类型已经知道时,例如a的回调   委托,您可以省略其参数的类型,返回类型或   二者“。

帮助?

1 个答案:

答案 0 :(得分:2)

它们是两个完全不同但虽然兼容的概念。回调是附加函数的钩子,因此当需要动作时,可以调用函数来提供结果或影响。闭包是一种捕获局部变量的函数,这些局部变量在本地范围之外的范围内使用。闭包可以是回调,就像任何其他函数可以作为回调一样,但它不仅限于使用。

在你的引用中,他们正在讨论如何使用闭包进行回调。在这种情况下,编译器可以从上下文中推断出函数签名(参数类型和返回)。

请注意,这与Objective-C块几乎没有关系。 Swift和Objective-C是两种完全不同的语言,块和闭包是类似概念的两种不同实现。