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ć?




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"

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"

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"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.