从此处获得它
终极关闭 最后,对于超简约的情况,有以下内容,而不会浪费字节。
let testEquality9 : (Int, Int) -> Bool = (==)
用 func
关键字贬值的功能只是用名称闭合。==
是一个命名函数的示例。它需要2个Int
争论,并返回Bool
告诉您它们是否相等。它的类型是(Int, Int) -> Bool
testequality9是一个封闭, (Int, Int) -> Bool
类型。为此,分配了==
功能的关闭。
可以这样称呼:
testEquality9(1, 2) // false
testEquality9(1, 1) // true
从中汲取的关键是,功能实际上只是关闭,因此可以在任何地方使用它们。
例如,如果您想对INT进行分类,则可以使用:
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(<)
这将通过函数(命名闭合)<
直接通过,而无需明确地将我们自己的闭合以围绕它。
这实际上不是封闭,而是比较两个整数存储在变量中的相等性运算符。
使用一个函数定义了每个操作员,并且该函数可以分配给变量。没有别的。
操作员重载:
func == (i : Int, j: Int) -> Bool {
return i == j
}
应该等效于此。
正如其他人所说,这是:
的缩写形式let testEquality9: (Int, Int) -> Bool = { (a: Int, b: Int) -> Bool in return a == b }
从右到左读取,它创建了一个比较两个int并将其分配给常量testequality9的函数。
您需要在精神上分开3件:
常数名称:
let testEquality9
常数类型(这是函数类型):
(Int, Int) -> Bool
和分配给常数的值:
(==)
或,长版本:
{ (a: Int, b: Int) -> Bool in return a == b }
享受swift:)