我有一个类对象数组,我想在特定索引处删除其中一个。该类包含简单变量。我尝试使用方法 removeAtIndex(index)。 但我收到错误: 类型的不可变值' [FieldData]'只有名为' removeAtIndex' 的变异成员 我发现要解决这个问题,我应该在我的方法的函数之前编写变异。但现在我收到了错误: '突变'对类或类绑定协议中的方法无效
有人能指出我正确的方向回答,我错误地使用了一个类吗? 或者我的问题是什么?
感谢您的帮助。
一般课程定义:
class FieldData {
//string variables
init(variables) {
...
}
}
方法定义
mutating func WandBestandEntf(fields: [FieldData]) -> [FieldData]? {
for var n = 0 as Int; n < fields.count; n++ {
if fields[n].name == "something" || fields[n].name == "other thing" {
fields.removeAtIndex(n)
}
}
}
答案 0 :(得分:4)
在swift函数中,默认情况下参数是常量。所以你无法改变它。
在您的方法中,只需在参数名称之前添加var
。
func WandBestandEntf(var fields: [FieldData]) -> [FieldData]? {
for var n = 0 as Int; n < fields.count; n++ {
if fields[n].name == "something" || fields[n].name == "other thing" {
fields.removeAtIndex(n)
}
}
return fields
}
答案 1 :(得分:4)
Dhaval Thanki的答案是解决问题的一种方法。为了完整性,通过引用而不是通过值将参数传递给方法,还有另一种实现相同的方法:
func WandBestandEntf(inout fields: [FieldData]) {
for var n = 0 as Int; n < fields.count; n++ {
if fields[n].name == "something" || fields[n].name == "other thing" {
fields.removeAtIndex(n)
}
}
}
inout
修饰符告诉方法fields
参数是通过引用传递的,因此它可以在方法体内更新,并且对原始数据执行的任何更改都将对原始数据执行,而不是它的副本(通过使用var
)。
由于更改已到位,因此无需返回更新的数据。
另请注意,为了明确参数通过引用传递,在调用方法时,它必须以&
运算符为前缀,这意味着&#34; 引用&#34;:
var array = [...]
WandBestandEntf(&array)
最后,请注意传递给方法的参数必须是可变的(即使用var
声明)。尝试传递对immutable的引用会引发明显的编译错误:
let array = [...]
WandBestandEntf(&array) // Error: Cannot assign to immutable value of type '[FieldData]'