当我遇到这个时,我正在研究Swift:
var action: () -> Void = {
print "hi"
}
var someVariable: Int -> Int
据我所知,到目前为止,这些应该是函数类型的变量“ 动作 ”是“不带任何参数并且不返回任何内容” -type而“ someVariable ”是“接受Int并返回Int” -type。
所以我的问题是:为什么不使用 func ?
func action() {
print "hi"
}
func someVariable(a: Int) -> Int {
return a + 1
}
这两个是一回事吗?或者在编写代码以使用 func 而不是函数类型变量时有一些偏好,反之亦然?如果有,何时使用什么?
答案 0 :(得分:3)
以下情况:
var someVariable: Int -> Int
您使用方法签名声明一个接受Int并返回Int的变量。您可以指定任何符合此方法签名的函数。您可以传递此变量,并在必要时将其指定为任何其他变量。它增加了如何分配方法的灵活性。
答案 1 :(得分:1)
功能是闭包的特例。根据{{3}}:
全局函数是具有名称但不捕获任何名称的闭包 值。
嵌套函数是具有名称并且可以捕获的闭包 封闭函数的值。闭包表达式未命名 用轻量级语法编写的闭包,可以从中捕获值 他们周围的环境。 Swift的闭包表达式很干净, 清晰的风格,优化鼓励简洁,杂乱无章 常见场景中的语法。
作为闭包的特例,函数可以在任何需要闭包的地方使用。