Swift 敏捷的UserDefaults和UISwitch

Swift 敏捷的UserDefaults和UISwitch,swift,nsuserdefaults,uiswitch,Swift,Nsuserdefaults,Uiswitch,我试图让UserDefaults使用UISwitch,但是当我强制关闭应用程序并重新打开它时,开关状态没有保存 更新:开始工作了。即使应用程序关闭,开关状态仍将保持在“开”或“关”状态 我的代码: let defaults = UserDefaults.standard @IBAction func switchAction(_ sender: UISwitch) { defaults.set(true, forKey: "saveTrue")

我试图让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")
}

我不确定这是否是您想要的,但我会这样做:

let defaults=UserDefaults.standard
@我的开关:我的开关!
//或“应用程序重新打开时”调用的任何其他函数
覆盖函数ViewDidDisplay(){
self.mySwitch.setOn(defaults.bool(forKey:“switchDefaultsKey”),动画:true)
}
@iAction func switchAction(\发送方:UISwitch){
defaults.set(sender.isOn,forKey:“switchDefaultsKey”)
}

我不明白你想做什么。您的
发送者.setOn
代码不会更改任何内容。您正在设置
setOn=false
,而它已经是
false
。脱离主题,但您可以只执行
if sender.isOn{…}else{…}
或使用三元运算符或使用.isOn设置true或false,而不是比较true和false。.setOn使开关处于ON或OFF状态。我的目标是使用UserDrfaults将UISwitch的状态保存在内存中。因此,如果应用程序在UISwitch处于打开状态时关闭,那么当应用程序重新打开时,它将保持这种状态。我已经解决了问题。在最初的问题正文中说明了这一点。此外,在ViewDidAspect func中,“defaults.setOn”将不起作用