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

kmi*_*las 9 xcode flags global viewdidload swift

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

var initialLoadFlag: Bool = true
Run Code Online (Sandbox Code Playgroud)

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

var initialLoadFlag: Bool = false
Run Code Online (Sandbox Code Playgroud)

然后检查它:

if initialLoadFlag {
   showWelcomeMessage() 
}
Run Code Online (Sandbox Code Playgroud)

所以,我想创建initialLoadFlag一个全局变量.在哪里以及如何?我试过了:

  • viewDidLoad我的视图控制器区域
  • application()我的AppDelegate.swift文件中的方法中
  • AppDelegate课堂上

没运气.我收到一条Use of unresolved identifier 'initialLoadFlag'错误消息

(注意:我意识到在这个问题中,我背叛了我对Swift如何处理范围的无知.请原谅我......我正处于截止日期,并且仍然对语言不熟悉.)

谢谢你的帮助.

Kee*_*nle 22

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

struct MyViewState {
    static var initialLoadFlag = false
}
Run Code Online (Sandbox Code Playgroud)

用法:

// Set
MyViewState.initialLoadFlag = true

// Get
let state = MyViewState.initialLoadFlag
println("My view state:\(state)")
Run Code Online (Sandbox Code Playgroud)

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


Gab*_*lla 3

您可以在主控制器中存储一个标志,并在执行到详细信息控制器的 segue 时将其设置为 true。例如

class MasterViewController: UIViewController {

    var firstTimePresenting = true

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "showDetail" {
            if firstTimePresenting {
                println("First time!")
                firstTimePresenting = false
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)