繁体   English   中英

这种类型的封闭意味着什么,它如何工作?

[英]What's this type of Closure supposed to mean and how does it work?

这里得到

最终的关闭最后,对于超简约的应用,有以下内容,而不会浪费字节。

let testEquality9 : (Int, Int) -> Bool = (==)

这实际上不是闭包,而是相等运算符,用于比较存储在变量中的两个整数。

每个运算符都使用一个函数定义,并且可以将该函数分配给变量。 没有别的了。

func关键字修饰的func只是带有名称的闭包。 ==是一个这样的命名函数的示例。 它需要2个Int争论,然后返回Bool告诉您它们是否相等。 它的类型是(Int, Int) -> Bool

testEquality9是一个闭包,类型为(Int, Int) -> Bool 为此,分配了==函数的闭包。

可以这样称呼:

testEquality9(1, 2) // false
testEquality9(1, 1) // true

从中得出的关键是,函数实际上只是闭包,因此可以在可以使用闭包的任何地方使用它们。

例如,如果您想对一个整数数组进行排序,则可以使用:

let ints = [3, 1, 4, 2]
let sorted = ints.sort{$0 < $1}

sort(_:)方法采用类型(Int, Int) -> Bool的闭包。 我们的闭包{$ 0 <$ 1}接受2个Int参数,并返回一个Bool 因此,它符合该签名。

但是,我们可以使这段代码更短。 因为<运算符的功能已经具有类型(Int, Int) -> Bool ,所以我们可以这样写:

let sorted = ints.sort(<)

这将直接传递函数(称为闭包) < ,而无需显式地创建我们自己的闭包即可。

运算符重载:

func == (i : Int, j: Int) -> Bool {
     return i == j
}

应该等效。

正如其他人所说,它是以下内容的缩写形式:

let testEquality9: (Int, Int) -> Bool = { (a: Int, b: Int) -> Bool in return a == b }

从右向左读取,它创建一个比较两个Ints并将其分配给常量testEquality9的函数。

您需要在精神上将这三个部分分开:

常量名称:

let testEquality9

常量类型(它是一个函数类型):

(Int, Int) -> Bool

并将值赋给常量:

(==)

或者,长版:

{ (a: Int, b: Int) -> Bool in return a == b }

享受Swift :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM