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