2017-11-30 4 views
0

私はUserDefaults Keyが存在するかどうかを確認しようとしていますが、それを私の選択した標準値に設定していない場合、スタックオーバーフローに関するここの回答は役に立ちません。Swift:UserDefaultsが存在し、選択された標準値を保存しないかどうかを確認する方法?

私は基本的に2つのUISスイッチを持っています.1つはオンで残りは最初からオフに設定されています。今私の問題は、viewControllerがロードされ、それらのキーが存在しないときに、これらの初期状態をUserDefaultsに保存する方法がわかりません。

これは、私がUISwitchのキーが存在するかどうかをチェックする方法ですが、trueに設定していないと(それが状態になっているため)、次にキーのブール値が何であるかを再度確認し、それにUISwitch(これはViewControllerをは別の時間を開いたときに、本質的に重要である):

func setupSwitches() { 
    let defaults = UserDefaults.standard 

    //check if the key exists 
    if !defaults.bool(forKey: "parallax") { 
     switchParallax.setOn(true, animated: true) 
    } 

    //check for the key and set the UISwitch 
    if defaults.bool(forKey: "parallax") { 
     switchParallax.setOn(true, animated: true) 
    } else { 
     switchParallax.setOn(false, animated: true) 
    } 

} 

ユーザーが私はこのようなUserDefaultsキー設定し、対応するボタンを押す

@IBAction func switchParallax_tapped(_ sender: UISwitch) { 
    let defaults = UserDefaults.standard 

    if sender.isOn == true { 
     defaults.set(true, forKey: "parallax") 
    } else { 
     defaults.set(false, forKey: "parallax") 
    } 
} 

これは明らかに取り組んでいますしかし、問題は上記の最初のコードにあります。

まず最初に、それが存在するかどうかをチェックする方法がわからず、 "true"に設定されていない場合、関数がsetupSwitches()と呼ばれるため、viewControllerが表示されるたびに実行されます。

キーが存在するかどうかをチェックするより良い方法があるかどうかはわかりません(たとえばメモリの問題のため)。もしそれがtrueに設定されていなければ、UserDefaultsからboolを取得し、右の状態に切り替える。

答えて

2

UserDefaults.standard.bool(forKey: key)で問題があると判断できません。 UserDefaults.standard.object(forKey: key)Any?を返すので、nilなどのテストに使用できます。

extension UserDefaults { 

    static func exists(key: String) -> Bool { 
     return UserDefaults.standard.object(forKey: key) != nil 
    } 

} 
+0

この関数は、キーが存在する場合はtrueを、そうでない場合はfalseを返します。その場合、私は虚偽を取得し、値を保存してUISwitchを正しく設定するための鍵が存在しない場合、私は声明文を書くことができますか? – RjC

+1

あなたの最初の質問に訂正してください、私は2番目の質問に従いませんでした。 'switchParallax_tapped()'メソッドで 'if'文を削除し、' defaults.set(sender.isOn、forKey: "parallax") 'を使うこともできます。 – Norman

+0

ありがとうございます。これはちょっと働いていて、UserDefaultsを設定する短い方法が本当に好きですが、何らかの理由で次回に読み込まれません。これは私がしていることです: 'parallax = UserDefaults.exists(key:" parallax ")'これは真(キーが存在する場合)を返すことを理解しているので、そうでなければ 'parallax == false { 'switchParallax.setOn(parallax、animated:true)'が正しくない場合(キーが存在しない場合)、正しく設定するためにdefaults.set(true、forKey: "parallax") } 。しかし、ビューが読み込まれると、今は常に真です。 – RjC

関連する問題