2016-03-15 7 views
5

Utworzono nowy plik ->swift file. nazywa Globals.Swift Wtedy tam zrobiłem:Trudno jest zaimplementować prosty singleton w trybie szybkim.

class Globals { 

    static let sharedInstance = Globals() 

    init() { 
     var max=100 
    } 

} 

W innej klasy (UIViewcontroller) Chciałbym go używać,

Globals.sharedInstance //is going ok 

jest dobra, ale kiedy go głęboko do .max otrzymuję błąd.

+2

Prawdopodobny duplikat [Używanie modelu wysyłkowego \ _once singleton w Swift] (http://stackoverflow.com/questions/24024549/using-a-dispatch-once-singleton-model-in-swift) –

+0

pytanie jest proste, nie trzeba iść daleko, a nie duplikat. Po prostu wszystko jest w porządku, do momentu, w którym próbuję wejść głębiej w .max – Curnelious

+2

Musisz zadeklarować 'max' jako zmienną instancji klasy ... – kennytm

Odpowiedz

9

Nie możesz mieć tylko var = xxx w init. Zmienna musi być zadeklarowana na najwyższym poziomie klasy.

Przykład korzystania pojedyncza:

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 

Kiedy trzeba używać singleton w innej klasie, wystarczy zrobić to w drugiej klasie:

let otherReferenceToTheSameSingleton = Globals.sharedInstance 

następującą aktualizację Martin R i Komentarze Caleba: Ustawiłem inicjator jako prywatny. Zapobiega on inicjowaniu w innych plikach Swift Globals(), egzekwując zachowanie tej klasy jako singletonu, dzięki możliwości korzystania tylko z Globals.sharedInstance.

+0

załapałem! dzięki, przyjmie za minutę. – Curnelious

+0

Czy istnieje różnica między self.max = 100 lub max = 100 w init()? – Curnelious

+1

To jest obiekt udostępniony, a nie singleton. – Caleb

Powiązane problemy