修改作为参数传递给Swift中的函数的数组

时间:2017-08-11 17:28:55

标签: swift

抱歉新手问题;我还在学习。我遇到了一些奇怪的行为,无法找到任何关于此的文档。我想知道你是否可以帮助指出我在这里做错了什么。

错误:

  

不能在不可变值上使用变异成员:'arr'是'let'常量

class mySingleton {
    static let sharedInstance = mySingleton()
    private init() {}

    var men = ["bob", "doug"]
    var women = ["alice", "lisa"]

    func removeFirst() {
        self.arr.removeFirst()
    }

    func removeFirstByGender(gender: String) {
        if gender == "men" {
              self.modify(arr: self.men) // <-- error occurs here.
        } else {
              self.modify(arr: self.women) // <-- error occurs here.
        }
    }

    func modify(arr: [String]) {
        arr.removeFirst()
    }
}

1 个答案:

答案 0 :(得分:3)

您需要更改modify的定义以接受inout参数。默认情况下,函数参数是不可变的,但通过使用inout关键字,您可以使它们变为可变。您还需要通过引用传递参数。

func modify( arr: inout [String]) {
    arr.removeFirst()
}
var stringArr = ["a","b"]
modify(arr: &stringArr) //stringArr = ["b"] after the function call