在关闭时解构元组的元组

Mar*_*une 6 closures tuples swift

我可以轻松地构建一个元组元组:

let tt = (2, (3, 4))

let (a, (b, c)) = tt
b // => 3
Run Code Online (Sandbox Code Playgroud)

在声明闭包时我想做同样的事情,例如我以为我可以写:

[tt].map { (a, (b, c)) in
    // Use b
}
Run Code Online (Sandbox Code Playgroud)

XCode抱怨"未命名的参数必须用空名称写".

我得到"工作"的唯一方法是:

[tt].map { (a, tuple: (b: Int, c: Int)) in
    // Use tuple.b
}
Run Code Online (Sandbox Code Playgroud)

这有两个我想避免的缺点:

  • 我需要用tuple.b而不是b
  • 我需要指定类型bc

顺便说一句,我的用例是我想reduce用索引做一个所以我正在尝试使用array.enumerate().reduce

Cod*_*ent 1

这满足了您的第一个要求,但仍然需要您添加类型注释:

typealias TupleType = (a: Int, tuple: (b: Int, c: Int))

let tt: TupleType = (2, (3, 4))

[tt].map {
    print($0.tuple.b)
}
Run Code Online (Sandbox Code Playgroud)