获取错误:
错误:不能在不可变值上使用变异成员:' fromArray'是一个“让...”恒定
在以下代码中:
func removing (item: Int, fromArray: [Int]) -> [Int] {
for i in 0...fromArray.count-1 {
if fromArray[i] == item {
let index = i
fromArray.remove(at: index) // <-- error is here
}
}
return fromArray
}
var anarray : [Int] = [1, 2,3, 4 ,3]
var x = 3
removing(item: x, fromArray: anarray)
答案 0 :(得分:8)
好吧,你也有从数组中删除元素然后超出其范围的问题。试试这样:
func removeInPlace(item: Int, fromArray: inout [Int]) -> Void {
for i in stride(from: fromArray.count - 1, to: 0, by: -1)
{
if fromArray[i] == item {
fromArray.remove(at: i)
}
}
}
var anarray : [Int] = [1, 2,3, 4 ,3]
var x = 3
print(anarray) // prints [1, 2, 3, 4, 3]
removeInPlace(item: x, fromArray: &anarray)
print(anarray) // prints [1, 2, 4]
您需要额外的错误处理,但希望这有助于您继续前进。
答案 1 :(得分:5)
默认情况下,swift中的参数是常量,但是如果你想在函数中改变它,那么它需要在inout变量中就位。您可以通过将参数指定为inout来实现它,如下所示
func removing (item: Int, fromArray : inout [Int]) -> [Int]
答案 2 :(得分:2)
如果要修改方法内的方法参数,可以使用inout
关键字声明它(请参阅the docs):
func removing(item: Int, fromArray: inout [Int]) -> [Int]
{
...
}
如果没有inout
关键字,则所有方法参数都是常量值。
答案 3 :(得分:2)
您看到的错误是由于尝试从只读数组中删除数组值。也就是说,fromArray
是只读的,因此是不可变的。你有两个选择。
选项#1:通过向其添加inout
使输入数组成为读写,并且不返回任何内容:
func removing (item: Int, fromArray: inout [Int]) {
for i in 0...fromArray.count-1 {
if fromArray[i] == item {
let index = i
fromArray.remove(at: index) // Error : cannot use mutating member on immutable value : 'fromArray' is a 'let' constant
}
}
}
选项#2:按原样使用该功能,但将阵列复制到新阵列中
func removing (item: Int, fromArray: inout [Int]) {
var newArray = fromArray
for i in 0...newArray.count-1 {
if newArray[i] == item {
let index = i
newArray.remove(at: index)
}
}
return newArray
}
除非inout
指示,否则传递给Swift中的函数的任何参数始终是只读的。