我正在尝试设置一个全局变量。在我的例子中,只是一个布尔标志,指示是否第一次呈现视图:
var initialLoadFlag: Bool = true
显示视图后,我想将此标志设置为false:
var initialLoadFlag: Bool = false
然后检查它:
if initialLoadFlag {
showWelcomeMessage()
}
所以,我想创建initialLoadFlag
作为全局变量。在哪里以及如何?我试过了:
viewDidLoad
区域application()
方法AppDelegate
班级没有运气。我收到了Use of unresolved identifier 'initialLoadFlag'
错误消息
(注意:我意识到在这个问题中,我背叛了我对Swift中范围处理方式的无知。请原谅我......我正处于截止日期,并且还是语言的新手。)
感谢您的帮助。
答案 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
}
}
}
}