Сброс логических значений Swift Struct после выхода из приложения - PullRequest
0 голосов
/ 06 февраля 2020

Первое сообщение здесь, в Stackoverflow.

Контекст: Я пытался реализовать код Swift, который бы загружал состояние isOn коммутатора ( True ) и сохранял измененный (если измененный) даже после закрытия представления.

Другими словами: Просто загрузите значение по умолчанию для переключателя isOn True логическое значение из Struct. Если коммутатор переключается пользователем - измените логическое значение ( if в приведенном ниже коде ).

Проблема заключается в следующем: Состояние isOn коммутатора сохраняется и загружается нормально после того, как окно закрыто и снова открыто. Однако , состояние снова такое же, как указано в инициализаторе (в данном случае True ) после принудительного выхода из приложения и его повторного открытия. Я подозреваю, что что-то не так со строкой инициализатора, поскольку она снова и снова инициализирует логическое значение как True.

Вопрос: Как сохранить значение isOn переключателя в Struct после принудительного выхода приложение и снова запускается?

Код:

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
}

1 Ответ

0 голосов
/ 07 февраля 2020

Решено путем изменения кода следующим образом: UserDefaults class:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...