答案 0 :(得分:1)
这实际上不是一个闭包,它是等于运算符,用于比较存储在变量中的两个整数。
使用函数定义每个运算符,并且可以将该函数分配给变量。没有别的了。
答案 1 :(得分:1)
使用func
关键字decalred的函数只是带名称的闭包。 ==
是一个这样的命名函数的示例。它需要2 Int
个参数,并返回Bool
告诉您它们是否相等。其类型为(Int, Int) -> Bool
testEquality9是一个类型为(Int, Int) -> Bool
的闭包。为此,分配了==
函数的闭包。
可以像这样调用:
testEquality9(1, 2) // false
testEquality9(1, 1) // true
从中得出的关键是函数实际上只是闭包,因此可以在任何地方使用闭包。
例如,如果要对Ints数组进行排序,可以使用:
let ints = [3, 1, 4, 2]
let sorted = ints.sort{$0 < $1}
sort(_:)
方法采用(Int, Int) -> Bool
类型的闭包。我们的关闭{$ 0&lt; $ 1}需要2 Int
个参数,并返回Bool
。所以它适合那种签名。
但是,我们可以缩短此代码。由于<
运算符的函数已经有(Int, Int) -> Bool
类型,我们可以这样写:
let sorted = ints.sort(<)
这直接传递函数(命名为closure)<
,而没有显式地使用我们自己的闭包来包装它。
答案 2 :(得分:0)
运算符重载:
func == (i : Int, j: Int) -> Bool {
return i == j
}
应该相当于那个。
答案 3 :(得分:0)
正如其他人所说,它是缩写形式:
let testEquality9: (Int, Int) -> Bool = { (a: Int, b: Int) -> Bool in return a == b }
从右到左阅读,它会创建一个比较两个Ints并将其分配给常量testEquality9的函数。
你需要在精神上分开3件:
常数名称:
let testEquality9
常量类型(它是函数类型):
(Int, Int) -> Bool
分配给常数的值:
(==)
OR,长版本:
{ (a: Int, b: Int) -> Bool in return a == b }
享受斯威夫特:)