Wie erstelle ich eine globale Variable?

123

Ich habe eine globale Variable, die von meinen ViewControllern gemeinsam genutzt werden muss.

In Objective-C kann ich eine statische Variable definieren, aber ich kann keine Möglichkeit finden, eine globale Variable in Swift zu definieren.

Kennen Sie einen Weg, dies zu tun?

czzhengkw
quelle
eine Antwort hier über stackoverflow.com/questions/24868120/…
Steve Rosenberg
Mögliches Duplikat von Wie erstelle ich eine globale Variable in Swift?
Ni Nisan Nijackle
Sie können Variablen oder Strukturen außerhalb der Klasse definieren und dann in der Gesamtanwendung auf diese Variablen zugreifen.
Chandni

Antworten:

209

Von der offiziellen Swift Programmierung Guide :

Globale Variablen sind Variablen, die außerhalb von Funktionen, Methoden, Abschlüssen oder Typkontexten definiert werden. Globale Konstanten und Variablen werden immer träge berechnet.

Sie können es in jeder Datei definieren und moduleüberall auf sie zugreifen . Sie können es also irgendwo in der Datei außerhalb eines beliebigen Bereichs definieren. Es besteht keine Notwendigkeit staticund alle globalen Variablen werden träge berechnet.

 var yourVariable = "someString"

Sie können von überall im aktuellen Modul darauf zugreifen.

Sie sollten dies jedoch vermeiden, da globale Variablen nicht für den Anwendungsstatus und hauptsächlich für Fehler geeignet sind.

Wie in dieser Antwort gezeigt , können Sie sie in Swift einkapseln structund überall darauf zugreifen. Sie können auch in Swift statische Variablen oder Konstanten definieren. Kapselung instruct

struct MyVariables {
    static var yourVariable = "someString"
}

Sie können diese Variable in jeder Klasse oder an jedem Ort verwenden

let string = MyVariables.yourVariable
println("Global variable:\(string)")

//Changing value of it
MyVariables.yourVariable = "anotherString"
Codester
quelle
3
Ihre Struktur wird aufgerufen MyVariables, MyViewStatesieht also aus wie ein Kopier- / Einfügefehler von stackoverflow.com/a/24868789/1187415 :)
Martin R
Danke Martin R. Ja, ich habe den Code daraus kopiert
Codester
9
Wenn Sie Code aus einer anderen Antwort kopieren, sollten Sie dies explizit angeben (mit einem Link zur ursprünglichen Antwort). Vergleichen Sie stackoverflow.com/help/referencing .
Martin R
1
Habe ich, danke! Aber gibt es einen Unterschied zwischen globaler Variable und Kapselung in Struktur?
Czzhengkw
3
Wird "MyVariables" nicht als global betrachtet? Wie macht es einen Unterschied, wenn wir es als globale Struktur oder Variable deklarieren?
Satyam
15

Globale Variablen, die außerhalb einer Methode oder eines Abschlusses definiert sind, können mithilfe des privaten Schlüsselworts eingeschränkt werden.

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"
Dan Coughlin
quelle
32
Eine Konstante ("let") ist keine Variable.
Mike Taverne
2
@ MikeTaverne Sie haben Recht, aber Sie können es als "var" einführen, dann ist diese Antwort in Ordnung. swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia
4

Wenn Sie es in all Ihren Klassen verwenden möchten, können Sie Folgendes verwenden:

public var yourVariable = "something"

Wenn Sie nur in einer Klasse verwenden möchten, können Sie Folgendes verwenden:

var yourVariable = "something"

quelle