2014-08-30 6 views
9

Sto giocando con un campo da giuoco Swift che lavora su una nuova classe. Per qualche ragione continuo a ricevere un errore che la classe "non ha un tipo di membro" con il nome di una costante definita da tre righe in precedenza. Ecco il codice:Il tipo non ha un membro

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 tiene darmi un errore sulla penultima riga, dicendo che "DataModel.Type non ha un membro denominato 'myCalendar'

Anche se non lo faccio penso che dovrebbe fare la differenza, ho provato a definire myCalendar come una variabile

risposta

8

Non è possibile inizializzare una proprietà di classe di istanza che fa riferimento a un'altra proprietà di istanza della stessa classe, perché non è garantito in quale ordine verranno inizializzati - e swift proibisce questo, quindi l'errore del compilatore (fuorviante)

Dovete spostare l'inizializzazione in un costruttore come segue:

let components: NSDateComponents 

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

Ha funzionato come un fascino. Grazie, Antonio! – user1790252

1

Sono d'accordo con @Antonio L'altro modo potrebbe essere quello di creare struct se non si desidera utilizzare 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) 
} 

prova

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

Anche questo ha funzionato; Ho contrassegnato @ la risposta di Antonio come corretta solo perché si adatta meglio al mio progetto complessivo. Grazie! – user1790252