gepree
gepree

Reputation: 677

Swift error "Immutable value only has mutating members"

When compiling the following Swift code (in 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")
    }
}

I get the following error on the line 'myArray.append("BBB")':

Immutable value of type 'Array<String>' only has mutating members named 'append'

How do I fix the code to allow a call to this mutable method?

Many thanks in advance

Upvotes: 4

Views: 2857

Answers (1)

Connor
Connor

Reputation: 64644

If you want to modify the array you have to specify it as in an inout parameter like this func addToString(inout myArray:Array<String>). Then when you call the function you have to add & in front of your argument to show that it can be modified by the function. Your code will look something like this:

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

You may want to take a look at in-out parameters on this page.

Upvotes: 9

Related Questions