¿Cómo crear una variable global?


123

Tengo una variable global que debe compartirse entre mis ViewControllers.

En Objective-C, puedo definir una variable estática, pero no puedo encontrar una manera de definir una variable global en Swift.

¿Conoces alguna forma de hacerlo?




puede definir una variable o estructura fuera de la clase, entonces podrá acceder a esa variable en la aplicación general.
Chandni

Respuestas:


209

De la guía de programación oficial de Swift :

Las variables globales son variables que se definen fuera de cualquier función, método, cierre o contexto de tipo. Las constantes y variables globales siempre se calculan de forma perezosa.

Puede definirlo en cualquier archivo y puede acceder a él en modulecualquier lugar actual . Entonces puede definirlo en algún lugar del archivo fuera de cualquier ámbito. No es necesario staticy todas las variables globales se calculan de forma perezosa.

 var yourVariable = "someString"

Puede acceder a esto desde cualquier lugar del módulo actual.

Sin embargo, debe evitar esto ya que las variables globales no son buenas para el estado de la aplicación y principalmente son la razón de los errores.

Como se muestra en esta respuesta , en Swift puede encapsularlos structy puede acceder a ellos desde cualquier lugar. También puede definir variables estáticas o constantes en Swift. Encapsular enstruct

struct MyVariables {
    static var yourVariable = "someString"
}

Puedes usar esta variable en cualquier clase o en cualquier lugar.

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

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

3
Se llama a su estructura MyVariables, por lo que MyViewStateparece un error de copiar / pegar de stackoverflow.com/a/24868789/1187415 :)
Martin R

Gracias Martin R. sí, he copiado el código de él
codeter

9
Si copia el código de otra respuesta, debe indicarlo explícitamente (con un enlace a la respuesta original). Compare stackoverflow.com/help/referencing .
Martin R

1
¡Gracias! Pero, ¿hay alguna diferencia entre variable global y encapsular en estructura?
czzhengkw

3
¿No se considerará "MyVariables" global? ¿Qué diferencia hay si lo declaramos como estructura o variable global?
Satyam

15

Las variables globales que se definen fuera de cualquier método o cierre pueden tener un alcance restringido utilizando la palabra clave privada.

import UIKit

// MARK: Local Constants

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

32
Una constante ("let") no es una variable.
Mike Taverne

2
@MikeTaverne Tienes razón, pero puedes introducirlo como "var", entonces esta respuesta estará bien. swifttipsnet.wordpress.com/2016/09/11/…
Milad Faridnia

4

si quieres usarlo en todas tus clases puedes usar:

public var yourVariable = "something"

si desea usar solo en una clase, puede usar:

var yourVariable = "something"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.