将 UISwitch 的切换数据保存在 UserDefaults 中
Save UISwitch's toggled data in UserDefaults
我已经声明了一个具有默认值 true
的布尔值,如果我的 UISwitch
启用,我希望布尔变量为 true 否则为 false,我的代码工作正常,直到我尝试存储该布尔值在 UserDefaults
中,当我重置 xCode 模拟器时,我使用 print
方法进行检查,但它并没有真正保存...
将应用任何解决方案。
var userDefaultSamarxvo:Bool = true
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
defaults.set(userDefaultSamarxvo,forKey: "Samarxvo") // set of userdefault
if userDefaultSamarxvo {
print("hello")
}else{
print("olleh")
}
}
@IBAction func samarxvoDidChange(_ sender: UISwitch) {
if sender.isOn {
userDefaultSamarxvo.toggle()
print("samarxo")
}else{
userDefaultSamarxvo.toggle()
print("samarxo 1 ")
}
}
在 viewDidLoad
中,您要从 用户默认值加载保存的值 。当开关更改时,您需要将新值 保存到 用户默认值。
设置局部变量 (userDefaultSamarxvo
) 不会更改用户默认值中存储的内容;局部变量不绑定到用户默认存储。
还有一个更复杂的问题;如果 UserDefaults 中的键没有值,bool(forKey)
将 return false
。如果您希望初始值为 true
那么您需要以某种方式处理它。您可以使用 object(forKey)
,其中 return 是可选的
var userDefaultSamarxvo:Bool = true {
didSet {
UserDefaults.standard.set(userDefaultSamarxvo, forKey:switchKey)
}
}
let defaults = UserDefaults.standard
let switchKey = "Samarxvo"
@IBOutlet weak var theSwitch: UISwitch!
override func viewDidLoad() {
super.viewDidLoad()
if defaults.object(forKey: switchKey) != nil {
userDefaultSamarxvo = defaults.bool(forKey: switchKey)
}
self.theSwitch.isOn = userDefaultSamarxvo
}
@IBAction func samarxvoDidChange(_ sender: UISwitch) {
userDefaultSamarxvo = sender.isOn
}
我使用 didSet
子句在 属性 更改时更新用户默认值。
我已经声明了一个具有默认值 true
的布尔值,如果我的 UISwitch
启用,我希望布尔变量为 true 否则为 false,我的代码工作正常,直到我尝试存储该布尔值在 UserDefaults
中,当我重置 xCode 模拟器时,我使用 print
方法进行检查,但它并没有真正保存...
将应用任何解决方案。
var userDefaultSamarxvo:Bool = true
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
defaults.set(userDefaultSamarxvo,forKey: "Samarxvo") // set of userdefault
if userDefaultSamarxvo {
print("hello")
}else{
print("olleh")
}
}
@IBAction func samarxvoDidChange(_ sender: UISwitch) {
if sender.isOn {
userDefaultSamarxvo.toggle()
print("samarxo")
}else{
userDefaultSamarxvo.toggle()
print("samarxo 1 ")
}
}
在 viewDidLoad
中,您要从 用户默认值加载保存的值 。当开关更改时,您需要将新值 保存到 用户默认值。
设置局部变量 (userDefaultSamarxvo
) 不会更改用户默认值中存储的内容;局部变量不绑定到用户默认存储。
还有一个更复杂的问题;如果 UserDefaults 中的键没有值,bool(forKey)
将 return false
。如果您希望初始值为 true
那么您需要以某种方式处理它。您可以使用 object(forKey)
,其中 return 是可选的
var userDefaultSamarxvo:Bool = true {
didSet {
UserDefaults.standard.set(userDefaultSamarxvo, forKey:switchKey)
}
}
let defaults = UserDefaults.standard
let switchKey = "Samarxvo"
@IBOutlet weak var theSwitch: UISwitch!
override func viewDidLoad() {
super.viewDidLoad()
if defaults.object(forKey: switchKey) != nil {
userDefaultSamarxvo = defaults.bool(forKey: switchKey)
}
self.theSwitch.isOn = userDefaultSamarxvo
}
@IBAction func samarxvoDidChange(_ sender: UISwitch) {
userDefaultSamarxvo = sender.isOn
}
我使用 didSet
子句在 属性 更改时更新用户默认值。