我的问题是关于在编写一个函数来初始化结构中的可选数组时我一直看到的错误,我通过将结构更改为类来解决这个错误。我希望有人可以向我解释我对结构和类导致这个问题的结构和类的理解。这是我的代码。
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]())
}
}
因此,函数initializeAllDataPoints
是导致错误的原因,而这正是这个问题的相关部分。我得到的错误是Cannot assign to 'allDataPoints' in 'self'
。当DataStorage
是一个结构时,我只会得到这个错误,当DataStorage
是一个类时,我不会得到它。我不了解造成这种行为差异的类和结构?
答案 0 :(得分:2)
只要struct
中的某个方法修改了自己的某个属性,就必须使用mutating
关键字。
我相信如果你写:
mutating func intializeAllDataPoints() { ... }
它应该适合你。
This article提供更多背景信息。