类型没有成员

时间:2014-08-30 13:27:11

标签: swift swift-playground

我正在玩一个新班级的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。

2 个答案:

答案 0 :(得分:9)

您无法初始化引用同一类的另一个实例属性的实例类属性,因为它无法保证它们将以何种顺序初始化 - 并且swift禁止它,因此(误导性)编译器错误。

您必须按如下方式在构造函数中移动初始化:

let components: NSDateComponents

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

答案 1 :(得分: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