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,393
  • 3
  • 24
  • 52

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
  • 62,633
  • 27
  • 143
  • 140
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,093
  • 3
  • 33
  • 52