RjC*_*RjC 3 xcode boolean nsuserdefaults uiswitch ios
我正在尝试检查UserDefaults密钥是否存在,如果没有将其设置为我选择的标准值,但这里的堆栈溢出答案并没有帮助我实现这一点.
基本上我有几个UISwitch,一个打开,其余的从一开始就设置为关闭.现在我的问题是,当加载viewController并且那些键不存在时,我不知道如何将这些初始状态保存到UserDefaults中.
这就是我试图检查UISwitch的密钥是否存在以及是否将其设置为true的原因(因为这是我希望它的状态),然后再次检查密钥的bool是什么,并将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)
}
}
Run Code Online (Sandbox Code Playgroud)
当用户按下相应的按钮时,我设置了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")
}
}
Run Code Online (Sandbox Code Playgroud)
这显然有效,但问题出在上面的第一个代码中.
首先,我不确定如何检查它是否存在,如果没有将其设置为"true",并且由于该函数被称为setupSwitches(),它将在每次显示viewController时运行.
因此,我不知道是否有更好的方法(例如,由于内存问题)来检查密钥是否存在,如果没有将其设置为true,如果它已经存在,则从UserDefaults获取bool并将开关设置为正确的国家.
Nor*_*man 11
问题是你无法确定存在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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3301 次 |
| 最近记录: |