web-dev-qa-db-fra.com

Comment créer une variable globale dans Swift?

J'essaie de définir une variable globale. Dans mon cas, juste un drapeau booléen qui indique si une vue est présentée pour la première fois:

var initialLoadFlag: Bool = true

Une fois la vue présentée, je souhaite définir ce drapeau sur false:

var initialLoadFlag: Bool = false

Et puis vérifiez-le désormais:

if initialLoadFlag {
   showWelcomeMessage() 
}

Donc, je voudrais créer initialLoadFlag comme variable globale. Ou et comment? J'ai essayé:

  • Dans la zone viewDidLoad de mon contrôleur de vue
  • Dans la méthode application() dans mon fichier AppDelegate.Swift
  • Dans la classe AppDelegate

Pas de chance. Je reçois un message d'erreur Use of unresolved identifier 'initialLoadFlag'

(Remarque: je me rends compte que dans cette question, je trahis mon ignorance de la façon dont la portée est gérée dans Swift. Veuillez me pardonner ... Je suis dans un délai, et encore nouveau dans la langue.)

Merci de votre aide.

9
kmiklas

Vous pouvez stocker un indicateur dans le contrôleur maître et le définir sur true lorsque vous effectuez la transition vers le contrôleur de détails. Par exemple.

class MasterViewController: UIViewController {

    var firstTimePresenting = true

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "showDetail" {
            if firstTimePresenting {
                println("First time!")
                firstTimePresenting = false
            }
        }
    }
}
4
Gabriele Petronella

Vous pouvez définir une structure avec un fichier statique:

struct MyViewState {
    static var initialLoadFlag = false
}

Usage:

// Set
MyViewState.initialLoadFlag = true

// Get
let state = MyViewState.initialLoadFlag
println("My view state:\(state)")

Remarques: Des hacks tels que les singletons et les vars globaux sont généralement nécessaires en cas de mauvaise conception. Vous pouvez peut-être enregistrer votre état dans NSUserDefaults? Ou stockez-le dans un objet de session qui peut être injecté dans n'importe quel ViewController qui doit être conscient du contexte.

22
Keenle