Swift - как установить начальное значение для NSUserDefaults
У меня есть переключатель под названием soundSwitch, я сохраняю состояние кнопки, используя по умолчанию пользователя:
@IBAction func soundsChanged(sender: AnyObject) {
if soundSwitch.on{
defaults.setBool(true, forKey: "SoundActive")
print("Sound ON")
}else{
defaults.setBool(false, forKey: "SoundActive")
print("Sound OFF")
}
}
В настоящее время фактическое значение по умолчанию изначально ложно, когда пользователь сначала запускает приложение.
Как реализовать значения по умолчанию для true, если пользователь впервые запускает приложение, и он еще не настроен.
Я видел методы в Objective-C, но ничего в Swift. Из того, что я видел, вы можете сделать это в делетете приложения каким-то образом или в файле plist. Как мне сделать это?
Ответы
Ответ 1
Пример синтаксиса Swift 3
Зарегистрировать логическое значение по умолчанию:
UserDefaults.standard.register(defaults: ["SoundActive" : true])
И чтобы получить значение:
UserDefaults.standard.bool(forKey: "SoundActive")
Sidenote: хотя приведенный выше код вернет true, обратите внимание, что это значение фактически не записывается на диск до тех пор, пока вы не установите:
UserDefaults.standard.set(true, forKey: "SoundActive")
Ответ 2
Добавьте это в свой метод didFinishLaunchingWithOptions
из AppDelegate. Как указывали некоторые другие, старайтесь не злоупотреблять, вкладывая все в этот метод.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
/// Here you can give default values to your UserDefault keys
UserDefaults.standard.register(defaults: [
"SoundActive": true,
"someOtherKey": "Some Message"
])
}
Ответ 3
Используя "registerDefaults", вы можете установить значение по умолчанию для NSUserDefaults
let userDefaultsDefaults = [
"SoundActive" : true
]
NSUserDefaults.standardUserDefaults().registerDefaults(userDefaultsDefaults)
Примечание: напишите это в файле didFinishLaunchingWithOptions, поэтому значение по умолчанию установлено.
напишите ниже код, где вы хотите проверить
let onoroff = NSUserDefaults.standardUserDefaults().objectForKey("SoundActive") as! Bool!
if (onoroff != nil && onoroff == false)
{
self.checkForAgreement()
}
Ответ 4
Нет ничего быстрого или специального делегата приложения.
Исходные значения по умолчанию устанавливаются вызовом registerDefaults:
в экземпляре standardUserDefaults
.
Вы можете сделать этот вызов несколько раз, и я бы рекомендовал, чтобы вы не делали этого в делете приложения, вместо этого регистрируйте соответствующие данные в соответствующее время в приложении, поэтому, если у вас есть 1 контроллер/подсистема просмотра, который использует определенные значения по умолчанию, затем регистрируют значения по умолчанию как часть инициализации, если этот код.
Только если у вас есть что-то, что используется несколькими различными частями кода, вы должны подумать об этом в делетете приложения, а затем только в том случае, если у вас нет другого подходящего контроллера для его выполнения.
Ответ 5
Swift 4
Я предпочитаю реализовывать функцию, аналогичную UserDefaults.string(forKey:), которая возвращает nil, если значение не установлено. В сочетании с Оператор, вам не нужно записывать какие-либо значения по умолчанию на диск, если вы не установите их позже.
extension UserDefaults {
public func optionalInt(forKey defaultName: String) -> Int? {
let defaults = self
if let value = defaults.value(forKey: defaultName) {
return value as? Int
}
return nil
}
public func optionalBool(forKey defaultName: String) -> Bool? {
let defaults = self
if let value = defaults.value(forKey: defaultName) {
return value as? Bool
}
return nil
}
}
Затем вы можете получить значения по умолчанию следующим образом
let defaults = UserDefaults.standard
let userName = defaults.string(forKey: "Username") ?? "Happy"
let userAge = defaults.optionalInt(forKey: "Age") ?? 21
let isSmart = defaults.optionalBool(forKey: "Smart") ?? true
Ответ 6
func lastStatus() -> Bool {
let defaultValue = true
if let value = default.valueForKey("SoundActive") {
// then use it
return value as? Bool ?? defaultValue
} else {
// oh, no value?
return defaultValue
}
}
Я думаю, что это лучший способ его использования. Также register(defaults:)
поможет, но в документации Apple предлагают использовать его как fallback
, например, разделение ситуации no value
и default value
. В зависимости от ваших потребностей.
Ответ 7
Если вы действительно хотите это сделать, поместите это в AppDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.valueForKey("SoundActive") == nil {
defaults.setBool(true, forKey: "SoundActive")
}
Если он используется только в одном диспетчере представлений, подумайте о том, чтобы вместо этого использовать код в методе viewDidLoad!
Ответ 8
Поместите это в свой "doneFinishLaunchingWithOptions" в AppDelegate.
if defaults.valueForKey("launchedAlready") == true {
print("Not first launch.")
}
else {
defaults.setValue(true, forKey: "launchedAlready")
defaults.setBool(true, forKey: "SoundActive")
print("Sound ON")
}
Ответ 9
Установите и активируйте звук.
var isSoundActivated: Bool {
get {
return defaults.bool(forKey: "SoundActive")
}
set {
defaults.set(newValue, forKey: "SoundActive")
defaults.synchronize()
}
}
Установить значение bool на
isSoundActivated = true
проверить значение bool на
if isSoundActivated {
print("sound activated")
}