2014-08-30 62 views
9

我正在玩一個新班級的Swift遊樂場。出於某種原因,我不斷收到一個錯誤,指出類「沒有成員類型」,並且前面定義了一個常量的名稱。下面是代碼:類型沒有任何成員

import Foundation 
class DataModel { 
    let myCalendar = NSCalendar.autoupdatingCurrentCalendar() 

    var myData = [NSDate : Float]() 
    let now = NSDate() 
    let components = myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: now) 
} 

的Xcode Beta6不斷給我的倒數第二行的錯誤,認爲「DataModel.Type沒有一個名爲成員‘myCalendar’

雖然我不認爲它應該有所作爲,我試圖將myCalendar定義爲變種

回答

8

您不能初始化引用同一類的另一個實例屬性的實例類屬性,因爲它無法保證它們將以何種順序進行初始化 - 而且swift禁止,因此(誤導)編譯器錯誤。

你必須移動初始化在構造函數如下:

let components: NSDateComponents 

init() { 
    self.components = myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: now) 
} 
+0

工作就像一個魅力。謝謝安東尼奧! – user1790252 2014-08-31 04:40:43

1

我同意@Antonio另一種方式可能是建立struct如果你不想使用init

class DataModel { 

    struct MyStruct { 
     static var myCalendar:NSCalendar = NSCalendar.autoupdatingCurrentCalendar() 
     static let now = NSDate() 
    } 

    var myData = [NSDate : Float]() 

    var components = MyStruct.myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: MyStruct.now) 
} 

測試

var model:DataModel = DataModel() 
var c = model.components.year // 2014 
+0

這也有效;我標記@安東尼奧的答案是正確的,只是因爲它適合我的整體項目。謝謝! – user1790252 2014-08-31 04:41:49

相關問題