Comment créer une variable globale?

123

J'ai une variable globale qui doit être partagée entre mes ViewControllers.

En Objective-C, je peux définir une variable statique, mais je ne trouve pas de moyen de définir une variable globale dans Swift.

Connaissez-vous un moyen de le faire?

czzhengkw
la source
une réponse ici stackoverflow.com/questions/24868120/…
Steve Rosenberg
Double possible de Comment créer une variable globale dans Swift?
Ni Nisan Nijackle
vous pouvez définir une variable ou une structure en dehors de la classe, puis vous pouvez accéder à cette variable dans l'application globale.
Chandni

Réponses:

209

Extrait du guide de programmation officiel Swift :

Les variables globales sont des variables définies en dehors de tout contexte de fonction, méthode, fermeture ou type. Les constantes et variables globales sont toujours calculées paresseusement.

Vous pouvez le définir dans n'importe quel fichier et y accéder en courant modulen'importe où. Vous pouvez donc le définir quelque part dans le fichier en dehors de toute portée. Il n'y a pas besoin de staticet toutes les variables globales sont calculées paresseusement.

 var yourVariable = "someString"

Vous pouvez y accéder de n'importe où dans le module actuel.

Cependant, vous devez éviter cela car les variables globales ne sont pas bonnes pour l'état de l'application et principalement en raison de bogues.

Comme indiqué dans cette réponse , dans Swift, vous pouvez les encapsuler structet y accéder n'importe où. Vous pouvez également définir des variables statiques ou des constantes dans Swift. Encapsuler dansstruct

struct MyVariables {
    static var yourVariable = "someString"
}

Vous pouvez utiliser cette variable dans n'importe quelle classe ou n'importe où

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

//Changing value of it
MyVariables.yourVariable = "anotherString"
codester
la source
3
Votre structure est appelée MyVariables, cela MyViewStateressemble donc à une erreur de copier / coller de stackoverflow.com/a/24868789/1187415 :)
Martin R
Merci Martin R. oui, j'ai copié le code à partir de celui
codester
9
Si vous copiez le code d'une autre réponse, vous devez l'indiquer explicitement (avec un lien vers la réponse d'origine). Comparez stackoverflow.com/help/referencing .
Martin R
1
Je l'ai Merci! Mais y a-t-il une différence entre variable globale et encapsuler dans struct?
czzhengkw
3
«MesVariables» ne sera-t-il pas considéré comme global? En quoi cela fait-il une différence si nous le déclarons comme structure ou variable globale?
Satyam
15

Les variables globales définies en dehors de toute méthode ou fermeture peuvent être restreintes à la portée à l'aide du mot clé private.

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"
Dan Coughlin
la source
32
Une constante ("let") n'est pas une variable.
Mike Taverne le
2
@MikeTaverne Vous avez raison mais vous pouvez l'introduire comme "var" alors cette réponse sera OK. swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia
4

si vous souhaitez l'utiliser dans toutes vos classes, vous pouvez utiliser:

public var yourVariable = "something"

si vous souhaitez utiliser une seule classe, vous pouvez utiliser:

var yourVariable = "something"

la source