gpt4 book ai didi

Swift:无法在某些闭包中分解元组(例如,使用枚举减少)?

转载 作者:行者123 更新时间:2023-11-28 09:08:58 25 4
gpt4 key购买 nike

当使用 map() 和 enumerate() 时,Swift 将分解枚举元组:

map(enumerate([1,2,3])) { (index, element) in
index + element
}

但是,这似乎无法与额外的闭包参数一起使用(例如,使用 reduce()):

reduce(enumerate([1,2,3]), 0) { (accum, (index, element)) in
accum + index + element
}

此操作失败并显示 错误:使用未声明的类型“索引”

我是否遗漏了一些简单的东西,或者 Swift 根本不允许分解一个元组和一个附加参数?我在 1.1 和 1.2 中尝试过这个。 (现在,我使用速记参数名称。)

最佳答案

答案是“Swift 根本不允许”。你不能像那样分解嵌套元组。

例如,这段代码可以编译,但我们不能访问jk:

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))

同理,this编译通过,但是没用。

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

关于Swift:无法在某些闭包中分解元组(例如,使用枚举减少)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com