了解赋值中的结构和类的Swift属性的差异

时间:2015-06-08 22:56:02

标签: ios swift oop struct

我的问题是关于在编写一个函数来初始化结构中的可选数组时我一直看到的错误,我通过将结构更改为类来解决这个错误。我希望有人可以向我解释我对结构和类导致这个问题的结构和类的理解。这是我的代码。

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是一个类时,我不会得到它。我不了解造成这种行为差异的类和结构?

1 个答案:

答案 0 :(得分:2)

只要struct中的某个方法修改了自己的某个属性,就必须使用mutating关键字。

我相信如果你写:

mutating func intializeAllDataPoints() { ... }

它应该适合你。

This article提供更多背景信息。