答案是“Swift 根本不允许”。你无法分解nested像这样的元组。
例如,这段代码可以编译,但我们无法访问j
or k
:
func foo(i: Int, (j: Int, k: Int) ) {
// println(j)
// ^ error: use of unresolved identifier 'j'
}
foo(1, (2, 3))
因为,在这段代码中,(j: Int, k: Int)
只是一个类型,接收到的元组本身没有名称。你必须这样写:
func foo(i: Int, x: (j: Int, k: Int) ) {
println(x.j)
}
foo(1, (1, 2))
同样的,这个可以编译,但是没有用。
reduce(enumerate([12,42,84]), 0) { (accum, (index:Int, element:Int)) in
相反,您必须接收元组本身,然后根据需要分解它:
reduce(enumerate([12,42,84]), 0) { (accum, enumerated) in
println(enumerated.element)
let (index, element) = enumerated