Swift错误"不可变值仅具有可变成员"

4
当编译以下Swift代码(在Sample.swift中)时:
import Cocoa

class Sample {
    func doSomething() {
        var stringArray = Array<String>()
        stringArray.append("AAA")
        addToString(stringArray)
        stringArray.append("CCC")
    }

    func addToString(myArray:Array<String>) {
        myArray.append("BBB")
    }
}

我在“myArray.append("BBB")”这一行遇到了以下错误:
Immutable value of type 'Array<String>' only has mutating members named 'append'

我该如何修复代码以允许调用这个可变方法?
非常感谢。
1个回答

9
如果您想修改数组,您需要将其指定为inout参数,例如func addToString(inout myArray:Array<String>)。然后在调用函数时,您需要在参数前面添加&以表示它可以被函数修改。您的代码将类似于以下内容:
class Sample {
    func doSomething() {
        var stringArray = Array<String>()
        stringArray.append("AAA")
        addToString(&stringArray)
        stringArray.append("CCC")
    }

    func addToString(inout myArray:Array<String>) {
        myArray.append("BBB")
    }
}

您可能希望查看这个页面关于in-out参数的内容:链接


太棒了!使用参数"inout"(并使用"&"传递它)完美地解决了问题。非常感谢您的帮助。 - gepree
以下是适用于Swift 3的答案版本:class Sample { func doSomething() { var stringArray = [String]() stringArray.append("AAA") addToString(withMyArray: &stringArray) stringArray.append("CCC") } func addToString(withMyArray myArray: inout [String]) { myArray.append("BBB") } } - gepree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接