2014-08-30 20 views
9

Ich spiele mit einem Swift-Spielplatz herum und arbeite an einer neuen Klasse. Aus irgendeinem Grund bekomme ich immer wieder einen Fehler, dass die Klasse "keinen Typ hat" mit dem Namen einer Konstanten, die drei Zeilen zuvor definiert wurde. Hier ist der Code:Typ hat kein Mitglied

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 hält gib mir einen Fehler auf der vorletzten Zeile und sagte, dass „DataModel.Type kein Mitglied benannt hat‚myCalendar‘

Obwohl ich nicht tun denke, dass es einen Unterschied machen sollte. Ich habe versucht, myCalendar als var.

Antwort

8

zu definieren. Sie können eine Instanzklasseneigenschaft, die auf eine andere Instanzeigenschaft derselben Klasse verweist, nicht initialisieren, da nicht garantiert wird, in welcher Reihenfolge sie initialisiert werden - und schnell verbietet das, daher der (irreführende) Compilerfehler

Sie haben die Initialisierung in einem Konstruktor zu bewegen, wie folgt:

let components: NSDateComponents 

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

Arbeitete wie ein Charme. Danke, Antonio! – user1790252

1

ich mit @Antonio Die andere Art und Weise einverstanden sein könnte struct zu erstellen, wenn Sie init nicht verwenden möchten:

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) 
} 

-Test

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

Das hat auch funktioniert; Ich habe @ Antonios Antwort nur als richtig markiert, weil sie besser zu meinem Gesamtprojekt passt. Vielen Dank! – user1790252

Verwandte Themen