5

In Swift, I'm trying to do the following:

struct Foo {
    var bar = 1

    func baz() {
        bar = 2
    }
}

Xcode reports the error Cannot assign to 'bar' in self on the line in the method.

Why? If I change the struct to a class, there's no error.

dpassage
  • 5,423
  • 3
  • 25
  • 53

2 Answers2

10

If you want to modify the properties of the struct, mark the function as mutating.

struct Foo {
    var bar = 1

    mutating func baz() {
        bar = 2
    }
}
Connor Pearson
  • 63,902
  • 28
  • 145
  • 142
3

The reason that you cannot assign to a struct's variable from within the struct itself is because instance methods of a struct cannot mutate instance variables. For this to work you need to add the keyword mutating before the declaration of the function.

This will give you the following code:

struct Foo {
    var bar = 1

    mutating func baz() {
        bar = 2
    }
}

The function baz() will now be able to mutate the instance variables of the struct.

Swinny89
  • 7,273
  • 3
  • 32
  • 52