Come creare una variabile globale?


123

Ho una variabile globale che deve essere condivisa tra i miei ViewController.

In Objective-C, posso definire una variabile statica, ma non riesco a trovare un modo per definire una variabile globale in Swift.

Conosci un modo per farlo?




puoi definire variabile o struttura al di fuori della classe, quindi puoi accedere a quella variabile nell'applicazione complessiva.
Chandni

Risposte:


209

Dalla guida ufficiale alla programmazione Swift :

Le variabili globali sono variabili definite al di fuori di qualsiasi funzione, metodo, chiusura o contesto di tipo. Le costanti e le variabili globali vengono sempre calcolate pigramente.

Puoi definirlo in qualsiasi file e puoi accedervi in ​​corrente moduleovunque. Quindi puoi definirlo da qualche parte nel file al di fuori di qualsiasi ambito. Non è necessario statice tutte le variabili globali vengono calcolate pigramente.

 var yourVariable = "someString"

Puoi accedervi da qualsiasi punto del modulo corrente.

Tuttavia dovresti evitarlo poiché le variabili globali non sono buone per lo stato dell'applicazione e principalmente per la causa dei bug.

Come mostrato in questa risposta , in Swift puoi incapsularli structe puoi accedervi ovunque. Puoi anche definire variabili statiche o costanti in Swift. Incapsula instruct

struct MyVariables {
    static var yourVariable = "someString"
}

Puoi usare questa variabile in qualsiasi classe o ovunque

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

//Changing value of it
MyVariables.yourVariable = "anotherString"

3
La tua struttura è chiamata MyVariables, quindi MyViewStatesembra un errore di copia / incolla da stackoverflow.com/a/24868789/1187415 :)
Martin R

Grazie Martin R. sì, ho copiato il codice da esso
codester

9
Se copi il codice da un'altra risposta, devi dichiararlo esplicitamente (con un collegamento alla risposta originale). Confronta stackoverflow.com/help/referencing .
Martin R

1
Capito grazie! Ma c'è qualche differenza tra la variabile globale e l'incapsulamento in struct?
czzhengkw

3
"MyVariables" non sarà considerato globale? Come fa la differenza se la dichiariamo come struttura o variabile globale?
Satyam

15

È possibile limitare l'ambito delle variabili globali definite al di fuori di qualsiasi metodo o chiusura utilizzando la parola chiave private.

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"

32
Una costante ("let") non è una variabile.
Mike Taverne

2
@MikeTaverne Hai ragione ma puoi introdurlo come "var", quindi questa risposta sarà OK. swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia

4

se vuoi usarlo in tutte le tue classi puoi usare:

public var yourVariable = "something"

se vuoi usare solo in una classe puoi usare:

var yourVariable = "something"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.