Swift 变量 list.enumerated()

Swift for var list.enumerated()

我有一个对象数组,其类型是具有可变函数的结构。所以我得到了这个代码:

for (index, object) in objects.enumerated() {
     otherArray[index] = object.someMutatingFunction(...)
}

这导致我出现此错误 Cannot use mutating member on immutable value of type 'Blabla',我可以通过添加 var:

来修复它
for var (index, object) in objects.enumerated() {
     otherArray[index] = object.someMutatingFunction(...)
}

但随后我收到另一个警告 Variable 'index' was never mutated; consider changing to 'let' constant,我不知道如何优雅地修复它。唯一的想法是添加一个新的 var 变量。我还能做些什么来防止出现此警告吗?

object 变量前加上 var 关键字:

struct S {
    mutating func f() { }
}

let array = [S(), S()]

for (index, var object) in array.enumerated() {
    object.f()
}

请注意,正如 Hamish 在此答案的评论中指出的那样,array 的元素不会被修改。只能修改 for 循环范围内 object 的本地副本。

如果你想修改array你必须在for循环的范围之外声明它var,然后分配给array索引。