Jak stworzyć zmienną globalną?

123

Mam zmienną globalną, którą należy udostępnić moim kontrolerom ViewControllers.

W Objective-C mogę zdefiniować zmienną statyczną, ale nie mogę znaleźć sposobu na zdefiniowanie zmiennej globalnej w Swift.

Czy wiesz, jak to zrobić?

czzhengkw
źródło
jedna odpowiedź tutaj stackoverflow.com/questions/24868120/…
Steve Rosenberg
Możliwy duplikat Jak utworzyć zmienną globalną w Swift?
Ni Nisan Nijackle
możesz zdefiniować zmienną lub strukturę poza klasą, a następnie możesz uzyskać dostęp do tej zmiennej w ogólnej aplikacji.
Chandni

Odpowiedzi:

209

Z oficjalnego przewodnika programowania Swift :

Zmienne globalne to zmienne zdefiniowane poza jakąkolwiek funkcją, metodą, zamknięciem lub kontekstem typu. Globalne stałe i zmienne są zawsze obliczane leniwie.

Możesz zdefiniować go w dowolnym pliku i mieć do niego dostęp w moduledowolnym miejscu. Możesz więc zdefiniować to gdzieś w pliku poza jakimkolwiek zakresem. Nie ma potrzeby, statica wszystkie zmienne globalne są obliczane leniwie.

 var yourVariable = "someString"

Możesz uzyskać do niego dostęp z dowolnego miejsca w bieżącym module.

Jednak powinieneś tego unikać, ponieważ zmienne globalne nie są dobre dla stanu aplikacji, a głównie z powodu błędów.

Jak pokazano w tej odpowiedzi , w Swift możesz je zamknąć structi uzyskać dostęp z dowolnego miejsca. Możesz także zdefiniować zmienne statyczne lub stałe w Swift. Hermetyzuj wstruct

struct MyVariables {
    static var yourVariable = "someString"
}

Możesz użyć tej zmiennej w dowolnej klasie lub w dowolnym miejscu

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

//Changing value of it
MyVariables.yourVariable = "anotherString"
kodester
źródło
3
Twoja struktura jest wywoływana MyVariables, więc MyViewStatewygląda na błąd kopiowania / wklejania ze stackoverflow.com/a/24868789/1187415 :)
Martin R
Dzięki Martin R. tak, skopiowałem z niego kod
codester
9
Jeśli skopiujesz kod z innej odpowiedzi, powinieneś to wyraźnie zaznaczyć (z linkiem do oryginalnej odpowiedzi). Porównaj stackoverflow.com/help/referencing .
Martin R
1
Mam to, dzieki! Ale czy jest jakaś różnica między zmienną globalną a hermetyzacją w strukturze?
czzhengkw
3
Czy „MyVariables” nie będzie traktowane jako globalne? Jak to się zmienia, jeśli zadeklarujemy ją jako globalną strukturę lub zmienną?
Satyam
15

Zakres zmiennych globalnych, które są zdefiniowane poza jakąkolwiek metodą lub zamknięciem, można ograniczyć za pomocą słowa kluczowego private.

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"
Dan Coughlin
źródło
32
Stała („let”) nie jest zmienną.
Mike Taverne
2
@MikeTaverne Masz rację, ale możesz wprowadzić to jako „var”, wtedy odpowiedź będzie OK. swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia
4

jeśli chcesz go używać na wszystkich swoich zajęciach, możesz użyć:

public var yourVariable = "something"

jeśli chcesz używać tylko w jednej klasie, możesz użyć:

var yourVariable = "something"

źródło