Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create global variable in Swift?

I am trying to set a global variable. In my case, just a boolean flag that indicates if a view is being presented for the first time:

var initialLoadFlag: Bool = true

After the view is presented, I want to set this flag to false:

var initialLoadFlag: Bool = false

And then check for it thenceforth:

if initialLoadFlag {
   showWelcomeMessage() 
}

So, I would like to create initialLoadFlag as a global variable. Where and how? I've tried:

  • In the viewDidLoad area of my view controller
  • In the application() method in my AppDelegate.swift file
  • In the AppDelegate class

No luck. I'm getting a Use of unresolved identifier 'initialLoadFlag' error message

(Note: I realize that in this question I betray my ignorance of how scope is handled in Swift. Please forgive me... I'm on a deadline, and still new to the language.)

Thanks for your help.

like image 971
kmiklas Avatar asked Jul 21 '14 14:07

kmiklas


2 Answers

You can define a struct with static field:

struct MyViewState {
    static var initialLoadFlag = false
}

Usage:

// set
MyViewState.initialLoadFlag = true

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

Remarks: Such hacks as singletons and global vars are usually needed in case of bad design. Maybe you can store your state in NSUserDefaults? Or store it in some session object that can be injected in any ViewController that needs to be aware about context.

like image 119
Keenle Avatar answered Sep 30 '22 19:09

Keenle


You could store a flag in the master controller and set it to true when you perform the segue to the details controller. E.g.

class MasterViewController: UIViewController {

    var firstTimePresenting = true

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "showDetail" {
            if firstTimePresenting {
                println("First time!")
                firstTimePresenting = false
            }
        }
    }
}
like image 28
Gabriele Petronella Avatar answered Sep 30 '22 19:09

Gabriele Petronella