swift swift-playground

swift - El tipo no tiene un miembro



swift-playground (2)

Estoy jugando con un patio de juegos Swift trabajando en una nueva clase. Por alguna razón, sigo recibiendo un error de que la clase "no tiene un tipo de miembro" con el nombre de una constante definida anteriormente tres líneas. Aquí está el código:

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 sigue dándome un error en la penúltima línea, diciendo que "DataModel.Type no tiene un miembro llamado ''myCalendar''

Aunque no creo que deba hacer una diferencia, he intentado definir myCalendar como var.


Estoy de acuerdo con @Antonio La otra forma podría ser crear una struct si no quieres usar 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) }

Prueba

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


No puede inicializar una propiedad de clase de instancia que haga referencia a otra propiedad de instancia de la misma clase, porque no está garantizado en qué orden se inicializarán, y Swift prohíbe eso, de ahí el error del compilador (engañoso).

Debe mover la inicialización en un constructor de la siguiente manera:

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