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

dmr*_*r07 6 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

Dáv*_*tor 8

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

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