Swift 中的链接方法

Chaining methods in Swift

我想编写一个可以链接到映射 { } 函数的函数。例如:

let arr = [1,2,3,4,5]
let list = arr.map { [=11=] * 2 }.applyRuleToSubtractVal(1) // return [1,3,5,7,9]

如何定义上面的applyRuleToSubtractVal()? (我想做更复杂的事情,不想在地图里面做。)

您需要扩展 Array 的功能。点运算符调用 class 或结构的方法。将您自己的功能扩展到 Array 结构。

您的地图 returns 是 Int 的数组,因此您可以使用点语法应用任何可以在 Array<Int> 上执行的数组方法。为了包含您自己的方法,请确保您以一种使之成为可能的方式扩展 Array,例如

extension Array where Element:IntegerType {
    func applyRuleToSubtractValue(num:Int) -> Array {
        return self.map{[=10=] - 1}
    }
}

let arr = [1,2,3,4,5]
let list = arr.map{[=10=] * 2}.applyRuleToSubtractValue(1) // [1, 3, 5, 7, 9]

如果我们这里不使用协议限制,那么我们将无法执行负 1 操作,因为它可能是任何类型的数组。

sketchyTech 的回答是正确的,但实际上它只是掩盖了一个事实,

let list = arr.map { [=10=] * 2 }.map { [=10=] - 1 }

被执行——这不是最优的,因为数组被枚举了两次。

您可以通过

的一个枚举实现相同的效果
let complexClosure = { (i: Int) in
    return i-1
}
let list = arr.map { complexClosure([=11=] * 2) }