2016-03-15 9 views
5

Ho creato un nuovo file ->swift file. chiamato Globals.Swift Poi lì ho fatto:Difficoltà a implementare un semplice singleton in swift

class Globals { 

    static let sharedInstance = Globals() 

    init() { 
     var max=100 
    } 

} 

In un'altra classe (UIViewcontroller) Vorrei usarlo,

Globals.sharedInstance //is going ok 

è buono, ma quando vado in profondità per .max ho la errore.

+2

Possibile duplicato di [Utilizzo di un modello di invio \ _once singleton in Swift] (http://stackoverflow.com/questions/24024549/using-a-dispatch-once-singleton-model-in-swift) –

+0

la domanda è semplice, non c'è bisogno di andare lontano, e non un duplicato. Ho appena capito tutto fino al punto in cui cerco di approfondire con .max – Curnelious

+2

Devi dichiarare 'max' come una variabile di istanza della classe ... – kennytm

risposta

9

Non si può semplicemente avere var = xxx in un init. La variabile deve essere dichiarata al livello più alto della classe.

Esempio di utilizzare il Singleton:

class Globals { 

    static let sharedInstance = Globals() 

    var max: Int 

    private init() { 
     self.max = 100 
    } 

} 

let singleton = Globals.sharedInstance 

print(singleton.max) // 100 

singleton.max = 42 

print(singleton.max) // 42 

Quando è necessario utilizzare il Singleton in un'altra classe, basta fare questo in altra classe:

let otherReferenceToTheSameSingleton = Globals.sharedInstance 

aggiornamento seguendo Martin R e Commenti di Caleb: Ho reso privato l'inizializzatore. Impedisce, in altri file Swift, l'inizializzazione di Globals(), facendo sì che questa classe si comporti come un singleton, solo in grado di utilizzare Globals.sharedInstance.

+0

capito! grazie, accetterà tra un minuto. – Curnelious

+0

c'è una differenza tra self.max = 100 o max = 100 in init()? – Curnelious

+1

Questo è un oggetto condiviso, non un singleton. – Caleb

Problemi correlati