2015-06-08 47 views
0

我的問題是關於我在編寫函數以初始化結構體中的可選數組時遇到的錯誤,我通過將結構體更改爲類。我希望有人能向我解釋我不瞭解導致這個問題的結構和類。這是我的代碼。瞭解賦值中的結構和類的Swift屬性的區別

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是一個類時,我不明白。對於導致行爲差異的類和結構,我不瞭解什麼?

回答

2

只要struct中的某個方法修改了其中一個屬性,就必須使用mutating關鍵字。

我相信,如果你寫:

mutating func intializeAllDataPoints() { ... } 

它應該爲你工作。

This article給出了一些更多的背景信息。