#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
}
Просто работайте со структурой настроек в вашем приложении. Он будет инициализирован только один раз.