[英]What's this type of Closure supposed to mean and how does it work?
这实际上不是闭包,而是相等运算符,用于比较存储在变量中的两个整数。
每个运算符都使用一个函数定义,并且可以将该函数分配给变量。 没有别的了。
用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.