web-dev-qa-db-fra.com

Comment créer une variable globale?

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 le moyen de définir une variable globale dans Swift.

Connaissez-vous un moyen de le faire?

102
czzhengkw

De Swift programmation guide

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

Vous pouvez le définir dans n’importe quel fichier et y accéder dans la version courante module n’importe où. Vous pouvez donc le définir quelque part dans le fichier en dehors de toute portée. static n'est pas nécessaire et toutes les variables globales sont calculées paresseusement.

 var yourVariable = "someString"

et vous pouvez accéder de n'importe où dans le module actuel.

Cependant, vous devriez éviter cela car les variables globales ne sont pas bonnes pour l'état de l'application et principalement la cause des bogues.

Comme indiqué dans ce réponse Dans Swift, vous pouvez les encapsuler dans struct et accéder à n’importe où. Vous pouvez également définir des variables statiques ou des constantes dans Swift. Encapsuler dans struct

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"
175
codester

Les variables globales définies en dehors de toute méthode ou clôture peuvent être soumises à une restriction de portée à l'aide du mot clé private.

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"
14
Dan Coughlin

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

public var yourVariable = "something"

si vous souhaitez utiliser uniquement dans une classe, vous pouvez utiliser:

var yourVariable = "something"
3
user9050369