0

My question is in regards to an error that I kept on seeing while writing a function to initialize an optional array in a struct that I solved by just changing the struct to the class. I am hoping that someone can explain to me what I am not understanding about structs and classes that is causing this problem. Here is my code.

struct DataStorage {
//When I change this to class DataStorage this works
    var listOfVariables = [VariableType]
    var allDataPoints: [[DataPoint]]?
    init() {
        listOfVariables = VariableType.getAllVariables(managedObjectContext)
    }
    func initializeAllDataPoints() {
        //THIS IS THE LINE IN QUESTION
        allDataPoints = [[DataPoint]](count: listOfVariables.count, repeatedValue: [DataPoint]())
    }
}

So, the function initializeAllDataPoints is what is causing the error and that is truly the relevant part of this question. The error that I get is Cannot assign to 'allDataPoints' in 'self'. I only get this error when DataStorage is a struct and I don't get it when DataStorage is a class. What am I not understanding about classes and structs that is causing this difference in behavior?

1 Answer 1

2

Whenever a method in a struct modifies one of its own properties, you have to use the mutating keyword.

I believe that if you write:

mutating func intializeAllDataPoints() { ... }

it should work for you.

This article gives a little more background information.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.