2016-03-15 4 views
5

Ich habe eine neue Datei ->swift file erstellt. genannt Globals.Swift Dann getan, was ich habe da drin:Schwierige Zeit implementieren ein einfaches Singleton in Swift

class Globals { 

    static let sharedInstance = Globals() 

    init() { 
     var max=100 
    } 

} 

In einer anderen Klasse (UIViewcontroller) würde ich es verwenden möchte,

Globals.sharedInstance //is going ok 

gut, aber wenn ich .max zu tief gehen bekomme ich die Error.

+2

Mögliches Duplikat von [Verwenden eines Dispatch \ _once Singleton-Modells in Swift] (http://stackoverflow.com/questions/24024549/using-a-dispatch-once-singleton-model-in-swift) –

+0

ist die Frage einfach, keine Notwendigkeit, weit zu gehen, und kein Duplikat. Ich bekomme es nur bis zu dem Punkt, wo ich versuche tiefer zu gehen mit der .max – Curnelious

+2

Sie müssen 'max' als Instanzvariable der Klasse deklarieren ... – kennytm

Antwort

9

Sie können nicht einfach var = xxx in einem init haben. Die Variable muss auf der obersten Klassenebene deklariert werden.

Beispiel Ihre Singletons verwenden:

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 

Wenn Sie benötigen die Singleton in einer anderen Klasse zu verwenden, die Sie tun dies nur in der anderen Klasse:

let otherReferenceToTheSameSingleton = Globals.sharedInstance 

-Update folgende Martin R und Calebs Kommentare: Ich habe den Initialisierer privat gemacht. Es verhindert in anderen Swift-Dateien die Initialisierung von Globals() und erzwingt, dass diese Klasse sich wie ein Singleton verhält, indem nur Globals.sharedInstance verwendet werden kann.

+0

hab es geschafft! Danke, werde in einer Minute akzeptieren. – Curnelious

+0

gibt es einen Unterschied zwischen self.max = 100 oder max = 100 in der init()? – Curnelious

+1

Dies ist ein gemeinsames Objekt, kein Singleton. – Caleb