Вы правы, лучше UX, чтобы где-то сохранять важные пользовательские выборы.Вам не стоит беспокоиться об использовании UserDefaults
- он предназначен для хранения этих простых настроек значения ключа.Кроме того, он не использует физическую память для ввода-вывода после первой загрузки - вам нужно вызвать .synchronize
, чтобы это произошло (например, когда приложение переходит в фоновый режим).
Я предлагаю2 подхода:
Первый более удобный для начинающих подход - это установить переменную, подобную этой:
var yourFlag : Bool {
get {
let defaults = Defaults.standard
return defaults.bool(forKey: "yourFlagKey")
}
set (newValue) {
let defaults = Defaults.standard
defaults.set(newValue, forKey: "yourFlagKey")
}
}
Таким образом, вы можете просто использовать вашу переменную, как и любые другие переменные экземпляра, но вкапот это будет использовать UserDefaults
.Например, в вашем действии изменения значения переключателя вы можете просто установить новое значение, и оно будет сохраняться на UserDefaults
:
func onValueChanged(sender: UISwitch) {
yourFlag = !sender.on
}
Я бы посоветовал не хранить эту переменную в вашем ViewController.Я обычно делаю контейнерный класс для всех своих пользовательских настроек, чтобы я мог проверить их там, где они мне нужны.В идеале вы хотели бы внедрить этот контейнер как зависимость для вашего UIViewController
.
Второй подход (если вы действительно хотите углубиться в функциональное программирование) - это научиться использовать FRP (функционально-реактивныйпрограммирование), такие как RxSwift и рассматривая событие изменения значения как наблюдаемую, на которой вы можете строить свои процессы.Однако, если вы только начинаете, я бы посоветовал научиться делать вещи обычным (яблочным) способом, чтобы вы знали, какие преимущества и недостатки приносит FRP.