gpt4 book ai didi

ios - 应用程序退出后 Swift Struct bool 值会重置

转载 作者:行者123 更新时间:2023-11-30 10:25:04 25 4
gpt4 key购买 nike

在 Stackoverflow 上发表的第一篇文章。

上下文:我一直在尝试实现 Swift 代码,该代码将加载开关的 isOn 状态(True)并保存修改后的状态(如果已修改),即使在关闭后也是如此 View 。

换句话说:仅加载开关的默认值是来自 Struct 的 On True bool 值。如果用户切换开关 - 更改 bool 值(下面代码中的 if 语句)。

问题是:在窗口关闭并重新打开后,开关的 isOn 状态可以保存并加载。 但是,在强制退出应用程序并再次重新打开应用程序后,状态再次与初始化程序中指定的相同(在本例中True)。我怀疑初始化器行有问题,因为它一次又一次地将 bool 值初始化为 True。

问题是:在强制退出应用程序并再次启动后,如何在 Struct 中保留 switch 的 isOn 值?

代码是:

struct sneakers {
var windy: Bool
}
var sneakersStates = sneakers.init(windy: true)

class CustomizationViewController: UIViewController {

@IBOutlet weak var windySwitch: UISwitch!

@IBAction func windySwitched(_ sender: UISwitch) {
if windySwitch.isOn == true {
sneakersStates.windy = true
} else {
sneakersStates.windy = false
}
}

override func viewDidLoad() {
super.viewDidLoad()

windySwitch.isOn = sneakersStates.windy
}

最佳答案

通过使用 UserDefaults 类更改代码来解决:

class CustomizationViewController: UIViewController {

@IBOutlet weak var windySwitch: UISwitch!

@IBAction func windySwitched(_ sender: UISwitch) {
UserDefaults.standard.set(sender.isOn, forKey: "sneakersWindySwitchedState") //Sets switch's isOn value on change
}

override func viewDidLoad() {
super.viewDidLoad()

let headLaunchedBefore = UserDefaults.standard.bool(forKey: "headLaunchedBefore")
if headLaunchedBefore { //executed on non-First Launch
windySwitch.isOn = UserDefaults.standard.bool(forKey: "sneakersWindySwitchedState") //Loads switch's isOn value
} else { //executed on First Launch
windySwitch.isOn = true
UserDefaults.standard.set(windySwitch.isOn, forKey: "sneakersWindySwitchedState") //Sets default switch's isOn true value on change
}

关于ios - 应用程序退出后 Swift Struct bool 值会重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60102937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com