我正在尝试检查UserDefaults key 是否存在,以及是否未将其设置为我选择的标准值,但是堆栈溢出的答案并没有帮助我使它正常工作。
本质上,我有几个UISwitches,一个打开,其余的从一开始就设置为关闭。现在我的问题是,当加载viewController且这些键不存在时,我不知道如何将这些初始状态保存到UserDefaults中。
这是我尝试检查UISwitch的键是否存在以及是否未将其设置为true(因为这是我想要的状态),然后再次检查该键的 boolean 值并将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时都会运行该函数。
所以我不知道是否有更好的方法(例如由于内存问题)来检查 key 是否存在,如果未将其设置为true以及是否已经存在,请从UserDefaults获取 boolean 值并将开关设置为正确的状态。
最佳答案
问题是您无法确定UserDefaults.standard.bool(forKey: key)
是否存在。 UserDefaults.standard.object(forKey: key)
返回Any?
,因此您可以使用它来测试是否为零,例如
extension UserDefaults {
static func exists(key: String) -> Bool {
return UserDefaults.standard.object(forKey: key) != nil
}
}
关于ios - 斯威夫特: How to check if UserDefaults exists and if not save a chosen standard value?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47581644/