我有一个简单的结构数组
var fields: [ProfileField]?
当我尝试遍历这个数组时,swift 向我显示这段代码的错误:
guard let _fields = fields else {return}
for field in _fields {
}
错误是:
Cannot use mutating getter on immutable value: 'field' is a 'let' constant
这段代码编译得很好:
for var field in _fields {
}
为什么我需要将 field
声明为 var
?
最佳答案
Swift 中的“mutating getter”是一种属性,其 get
block 具有 mutating
修饰符。例如,如果您的 ProfileField
如下所示:
struct ProfileField {
var accessCount: Int = 0
var x: Int {
mutating get { // ← mutating getter here
accessCount++
return x
}
}
}
...然后这段代码会产生“不能在不可变值上使用可变 getter”错误:
for field in _fields {
print(field.x)
}
即使它看起来不像field.x
修改field
,它确实:它递增accessCount
。这就是为什么你必须使用 var field
来使字段可变。 (默认情况下,for 循环迭代器是 let
。)
没有看到您的 ProfileField
或您的 for 循环的主体,就不可能确切地说出为什么会出现这种情况。如果您没有在 ProfileField
本身中使用 mutating get
,它可能发生在嵌套在 ProfileField
中的结构中。
关于ios - 尝试快速遍历结构数组时出现奇怪的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33438194/