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?




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"

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"

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"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.