10

我正在玩一个 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 定义为 var。

4

2 回答 2

9

您不能初始化引用同一类的另一个实例属性的实例类属性,因为不能保证它们将以什么顺序被初始化 - 并且 swift 禁止这样做,因此(误导性)编译器错误。

您必须在构造函数中移动初始化,如下所示:

let components: NSDateComponents

init() {
    self.components = myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: now)
}
于 2014-08-30T13:37:23.187 回答
1

我同意如果您不想使用@Antonio,另一种方法可能是创建:structinit

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
于 2014-08-30T13:46:03.633 回答