如何在Swift中创建全局变量?

时间:2014-07-21 14:49:58

标签: xcode swift global flags viewdidload

我正在尝试设置一个全局变量。在我的例子中,只是一个布尔标志,指示是否第一次呈现视图:

var initialLoadFlag: Bool = true

显示视图后,我想将此标志设置为false:

var initialLoadFlag: Bool = false

然后检查它:

if initialLoadFlag {
   showWelcomeMessage() 
}

所以,我想创建initialLoadFlag作为全局变量。在哪里以及如何?我试过了:

  • 在我的视图控制器的viewDidLoad区域
  • 在我的AppDelegate.swift文件中的application()方法
  • AppDelegate班级

没有运气。我收到了Use of unresolved identifier 'initialLoadFlag'错误消息

(注意:我意识到在这个问题中,我背叛了我对Swift中范围处理方式的无知。请原谅我......我正处于截止日期,并且还是语言的新手。)

感谢您的帮助。

2 个答案:

答案 0 :(得分:21)

您可以使用静态字段定义结构:

struct MyViewState {
    static var initialLoadFlag = false
}

用法:

// Set
MyViewState.initialLoadFlag = true

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

<强>说明: 如果设计不好,通常需要单身和全球变形等黑客攻击。也许你可以在NSUserDefaults存储你的州?或者将它存储在一些会话对象中,该对象可以在需要了解上下文的任何ViewController中注入。

答案 1 :(得分:4)

您可以在主控制器中存储标志,并在执行细节控制器的segue时将其设置为true。 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
            }
        }
    }
}