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é:
viewDidLoad
de mon contrôleur de vueapplication()
dans mon fichier AppDelegate.SwiftAppDelegate
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.
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
}
}
}
}
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.