web-dev-qa-db-ja.com

Swiftでグローバル変数を作成する方法は?

グローバル変数を設定しようとしています。私の場合、ビューが初めて表示されているかどうかを示すブールフラグのみです。

_var initialLoadFlag: Bool = true
_

ビューが表示された後、このフラグをfalseに設定します。

_var initialLoadFlag: Bool = false
_

その後、それを確認します。

_if initialLoadFlag {
   showWelcomeMessage() 
}
_

そこで、initialLoadFlagをグローバル変数として作成したいと思います。どこで、どうやって?私はもう試した:

  • 私のView ControllerのviewDidLoadエリア
  • AppDelegate.Swiftファイルのapplication()メソッド内
  • AppDelegateクラス

運が悪い。 _Use of unresolved identifier 'initialLoadFlag'_エラーメッセージが表示される

(注:この質問では、スコープがSwiftでどのように処理されるかについての無知を裏切っていることに気づきました。ご容赦ください...私は締め切りにありますが、まだこの言語は初めてです。)

ご協力いただきありがとうございます。

9
kmiklas

フラグをマスターコントローラーに格納し、詳細コントローラーにセグエを実行するときにフラグを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
            }
        }
    }
}
4

静的フィールドで構造体を定義できます:

struct MyViewState {
    static var initialLoadFlag = false
}

使用法:

// Set
MyViewState.initialLoadFlag = true

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

備考:設計が悪い場合は、通常、シングルトンやグローバル変数などのハックが必要です。多分あなたはあなたの状態をNSUserDefaultsに保存できますか?または、コンテキストを認識する必要のある任意のViewControllerに挿入できるセッションオブジェクトに保存します。

22
Keenle