首页 > 解决方案 > 迅速。UserDefaults 和 UISwitch

问题描述

我试图让 UserDefaults 与 UISwitch 一起使用,但是当我强制关闭应用程序并重新打开它时,开关状态没有保存。

更新:让它工作。即使应用程序关闭,开关状态也将保持在“开”或“关”状态。

我的代码:

let defaults = UserDefaults.standard


@IBAction func switchAction(_ sender: UISwitch) {
    
    defaults.set(true, forKey: "saveTrue")
    defaults.set(false, forKey: "saveFalse")

    if sender.isOn == false {
        sender.setOn(defaults.bool(forKey: "saveFalse"), animated: true)
    } else if sender.isOn == true {
        sender.setOn(defaults.bool(forKey: "saveTrue"), animated: true)
    }

}

回答:;;;

let defaults = UserDefaults.standard

override func viewDidLoad() {
    super.viewDidLoad()

    if let switchValue = getSwitchValue(), switchValue {
        switchOutlet.setOn(true, animated: true)
    } else {
        switchOutlet.setOn(false, animated: true)
    }
}


@IBAction func Switch(_ sender: UISwitch) {
if sender.isOn == false {
        setSwitchStatus(status: false)
        sender.setOn(false, animated: true)
    } else if sender.isOn == true {
        setSwitchStatus(status: true)
        sender.setOn(true, animated: true)
    }
}


func setSwitchStatus(status: Bool?) {
    if status != nil {
        defaults.set(status, forKey: "save1")
    }
}

func getSwitchValue() -> Bool? {
    return defaults.bool(forKey: "save1")
}

标签: swiftnsuserdefaultsuiswitch

解决方案


我不确定这是你要找的东西,但我会这样做:

let defaults = UserDefaults.standard
@IBOutlet mySwitch: UISwitch!

//or any other function that is called 'when the app is reopened' 
override func viewDidAppear() {
    self.mySwitch.setOn(defaults.bool(forKey: "switchDefaultsKey"), animated: true)
}

@IBAction func switchAction(_ sender: UISwitch) {
    defaults.set(sender.isOn, forKey: "switchDefaultsKey")
}

推荐阅读