将 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 子句在 属性 更改时更新用户默认值。