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

标签 ios swift closures

Here得到

终极关闭 最后,对于超简约,有以下内容,没有浪费一个字节。

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 < $1} 需要 2 Int参数,并返回一个 Bool .所以它适合那个签名。

但是,我们可以缩短这段代码。因为 < 运算符的函数已经有类型 (Int, Int) -> Bool ,我们可以这样写:

let sorted = ints.sort(<)

这传递了函数(命名为闭包)<直接输入,而无需明确创建我们自己的闭包来环绕它。

关于ios - 这种类型的闭包应该意味着什么,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37841581/

相关文章:

ios - 试图获取视频缩略图

ios - 为什么我的 Swift 函数要求我提供错误的变量

c - 如何在 OS X 中包含 FFI?

循环内的 JavaScript 闭包 – 简单的实际示例

ios - 没有收到来自 LinkedIn Objective-C 的电子邮件

ios - 使用 Parse.com 进行多查询搜索

ios - 当前 View Controller 在 Swift 中不起作用

ios - 如何在 collectionView 单元格中设置 NSLayoutConstraint 常量?

arrays - 简单的 Swift 数组扩展

用简单的英语描述 JavaScript 闭包和副作用? (分别地)