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
索引。
我有一个对象数组,其类型是具有可变函数的结构。所以我得到了这个代码:
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
索引。