Como criar uma variável global?

123

Eu tenho uma variável global que precisa ser compartilhada entre meus ViewControllers.

No Objective-C, posso definir uma variável estática, mas não consigo encontrar uma maneira de definir uma variável global no Swift.

Você conhece uma maneira de fazer isso?

czzhengkw
fonte
uma resposta aqui stackoverflow.com/questions/24868120/…
Steve Rosenberg
Possível duplicata de Como criar variável global no Swift?
Ni Nisan Nijackle
como você pode definir uma variável ou estrutura fora da classe, poderá acessar essa variável no aplicativo geral.
Chandni

Respostas:

209

No guia de programação oficial Swift :

Variáveis ​​globais são variáveis ​​definidas fora de qualquer contexto de função, método, fechamento ou tipo. Constantes e variáveis ​​globais são sempre calculadas preguiçosamente.

Você pode defini-lo em qualquer arquivo e acessá-lo atual em modulequalquer lugar. Portanto, você pode defini-lo em algum lugar do arquivo fora de qualquer escopo. Não há necessidade statice todas as variáveis ​​globais são computadas preguiçosamente.

 var yourVariable = "someString"

Você pode acessá-lo de qualquer lugar no módulo atual.

No entanto, você deve evitar isso, pois as variáveis ​​globais não são boas para o estado do aplicativo e principalmente o motivo de erros.

Como mostrado nesta resposta , no Swift você pode encapsulá-los structe acessar em qualquer lugar. Você também pode definir variáveis ​​estáticas ou constantes no Swift. Encapsular emstruct

struct MyVariables {
    static var yourVariable = "someString"
}

Você pode usar essa variável em qualquer classe ou em qualquer lugar

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

//Changing value of it
MyVariables.yourVariable = "anotherString"
codester
fonte
3
Sua estrutura é chamada MyVariables, por isso MyViewStateparece um copy / paste de erro de stackoverflow.com/a/24868789/1187415 :)
Martin R
Obrigado Martin R. sim, eu copiei o código dele
codester
9
Se você copiar o código de outra resposta, declare isso explicitamente (com um link para a resposta original). Compare stackoverflow.com/help/referencing .
Martin R
1
Entendi, obrigado! Mas existe alguma diferença entre variável global e encapsular em struct?
Czzhengkw
3
"MyVariables" não serão consideradas globais? Como isso faz diferença se a declaramos como estrutura ou variável global?
Satyam
15

Variáveis ​​globais definidas fora de qualquer método ou fechamento podem ter escopo restrito usando a palavra-chave privada.

import UIKit

// MARK: Local Constants

private let changeSegueId = "MasterToChange"
private let bookSegueId   = "MasterToBook"
Dan Coughlin
fonte
32
Uma constante ("let") não é uma variável.
Mike Taverne
2
@ MikeTaverne Você está certo, mas pode apresentá-lo como "var", então esta resposta será boa. swifttipsnet.wordpress.com/2016/09/11/...
Milad Faridnia
4

se você quiser usá-lo em todas as suas classes, poderá usar:

public var yourVariable = "something"

Se você quiser usar apenas uma classe, poderá usar:

var yourVariable = "something"

fonte