我可以轻松地构建一个元组元组:
let tt = (2, (3, 4))
let (a, (b, c)) = tt
b // => 3
我想在声明一个闭包时也这样做,例如我以为我可以写:
[tt].map { (a, (b, c)) in
// Use b
}
XCode抱怨"未命名的参数必须用空名称编写"。
只有这样我才能做到"工作"是:
[tt].map { (a, tuple: (b: Int, c: Int)) in
// Use tuple.b
}
这有两个我想避免的缺点:
tuple.b
代替b
b
和c
顺便说一句,我的用例是我想用reduce
索引,所以我尝试使用array.enumerate().reduce
答案 0 :(得分:2)
使用额外的分配行,您可以将数组中的值分配给(a, (b, c))
以解构元组:
let tt1 = (2, (3, 4))
let tt2 = (5, (6, 7))
[tt1, tt2].map { tt in
let (a, (b, c)) = tt
print(b)
}
输出:
3 6
可替换地:
[tt1, tt2].map {
let (a, (b, c)) = $0
print(b)
}
答案 1 :(得分:1)
这符合您的第一个要求,但仍需要您添加类型annonation:
typealias TupleType = (a: Int, tuple: (b: Int, c: Int))
let tt: TupleType = (2, (3, 4))
[tt].map {
print($0.tuple.b)
}
答案 2 :(得分:0)
另一种解决方法:
[tt].map { a, b in
let (b, c) = b
print(a, b, c)
}