【问题标题】:Swift error "Immutable value only has mutating members"Swift 错误“不可变值只有可变成员”
【发布时间】:2014-07-28 10:31:07
【问题描述】:

在编译以下 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'

如何修复代码以允许调用此可变方法?

在此先感谢

【问题讨论】:

    标签: macos swift


    【解决方案1】:

    如果你想修改数组,你必须在像func addToString(inout myArray:Array&lt;String&gt;) 这样的inout 参数中指定它。然后,当您调用该函数时,您必须在参数前面添加 & 以表明它可以被该函数修改。您的代码将如下所示:

    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")
        }
    }
    

    您可能想查看this page 上的输入输出参数。

    【讨论】:

    • 太棒了!使参数“inout”(并使用“&”传递它)效果很好。非常感谢。
    • 这是一个适用于 Swift 3 的答案版本:class Sample {func doSomething() {var stringArray = [String]()stringArray.append("AAA")addToString(withMyArray: &amp;stringArray)stringArray.append("CCC")}func addToString(withMyArray myArray: inout [String]) {@987654 @}
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多