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ć?
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ć?
Odpowiedzi:
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 module
dowolnym miejscu. Możesz więc zdefiniować to gdzieś w pliku poza jakimkolwiek zakresem. Nie ma potrzeby, static
a 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ąć struct
i 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"
MyVariables
, więc MyViewState
wygląda na błąd kopiowania / wklejania ze stackoverflow.com/a/24868789/1187415 :)
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"
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"