Swift for var list.enumerated()
Posted
技术标签:
【中文标题】Swift for var list.enumerated()【英文标题】: 【发布时间】:2017-08-22 05:14:24 【问题描述】:我有一个对象数组,其类型是具有变异函数的结构。所以我得到了这个代码:
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 变量。我还能做些什么来阻止这个警告吗?
【问题讨论】:
请注意enumerated()
是一个方法,而不是一个属性。
你是对的。对不起。
【参考方案1】:
在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
索引。
【讨论】:
实际上意识到 OP 正在寻找将变异元素分配到另一个数组otherArray
而不是原始数组,所以我删除了我的评论。
我认为您指出这一点仍然非常正确,因为mutating
方面很容易被误解为修改array
的元素。以上是关于Swift for var list.enumerated()的主要内容,如果未能解决你的问题,请参考以下文章