Swift: как внести изменения в переменную загрузку при следующем открытии приложения

#ios #swift

#iOS #swift

Вопрос:

У меня есть некоторые переменные глобальных настроек, которые иногда изменяются пользователем во время выполнения приложений. Я хочу, чтобы пользователи менялись постоянно, но на данный момент каждый раз, когда приложение перезагружается, оно возвращается к исходным значениям, например. пользователь изменяет SettingsVariables.settingTwo на false, но затем, когда приложение перезапускается, значение переменных возвращается к true (исходное значение).

 import UIKit

struct SettingsVariables {

static var settingOne = 0
static var settingTwo = true

}
  

Ответ №1:

Что вам нужно, так это создать UserDefaults значения, которые будут храниться в памяти даже при закрытии и перезапуске приложения.

 // Set
UserDefaults.standard.set(123, forKey: "key")
// Get
UserDefaults.standard.integer(forKey: "key")
  

Итак, в принципе, вы могли бы сделать это в своем AppDeletegates applicationWillTerminate .

 UserDefaults.standard.set(SettingsVariables.settingOne, forKey: "settingOne")
  

а затем, когда ваше приложение снова запустится, вы можете сделать

SettingsVariables.settingOne = UserDefaults.standard.integer(forKey: "settingOne")

Если вы хотите использовать свой Struct .

Обновить
Для используемого вами Swift 2 синтаксис следующий:

 // Set
NSUserDefaults.standardUserDefaults().setInteger(123, forKey: "key")
// Get
NSUserDefaults.standardUserDefaults().integerForKey("key")
  

Комментарии:

1. спасибо за ответ. Когда я добавляю это в appdelegate, появляется сообщение «использование неразрешенного идентификатора UserDefaults. Должно ли это быть NSUserDefaults вместо этого? Спасибо

2. Вы используете Swift 2 или Swift 3?

3. ах … swift 2 в настоящее время

4. На самом деле вам вообще не нужны пользовательские ошибки для реализации такого поведения. Посмотрите на ответ ниже 😉

5. Вы не должны полагаться на метод applicationWillTerminate, не гарантируется, что он будет вызван. Например, если ваше приложение по какой-либо причине выйдет из строя, вы начнете с неправильных значений по умолчанию, как вам нужно.

Ответ №2:

Я бы объявил выделенную структуру со значениями по умолчанию:

 struct SettingsDefaults {
    static let settingOneDefault = 0
    static let settingTwoDefault = true
}
  

И структура настроек, которая инициализируется значениями по умолчанию, но доступна для редактирования, в отличие от настроек по умолчанию.

 struct Settings {
    static var settingOne = SettingsDefaults.settingOneDefault
    static var settingTwo = SettingsDefaults.settingTwoDefault
}
  

Просто работайте со структурой настроек в вашем приложении. Он будет инициализирован только один раз.