这种类型的闭包应该意味着什么,它是如何工作的?



从此处获得它

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

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:)

最新更新