Swift - How to set initial value for NSUserDefaults
Swift 3 syntax example
Register a boolean default value:
UserDefaults.standard.register(defaults: ["SoundActive" : true])
And to get the value:
UserDefaults.standard.bool(forKey: "SoundActive")
Sidenote: Although the above code will return true, note that the value isn't actually written to disk until you set it:
UserDefaults.standard.set(true, forKey: "SoundActive")
Add this to your didFinishLaunchingWithOptions
method from the AppDelegate. As some others pointed out try not to abuse by putting everything in this method.
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"
])
}
Swift 4
I prefer to implement a function similar to UserDefaults.string(forKey: )
which returns nil
if the value is not set. Combined with the ?? operator, you don't need to have any default values written to disk unless you explicitly set them later.
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
}
}
Then you can retrieve your default values as follows
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
Using "registerDefaults" you can set Default value of NSUserDefaults
let userDefaultsDefaults = [
"SoundActive" : true
]
NSUserDefaults.standardUserDefaults().registerDefaults(userDefaultsDefaults)
Note: write this in didFinishLaunchingWithOptions, so default value is set.
write below code where you want to check
let onoroff = NSUserDefaults.standardUserDefaults().objectForKey("SoundActive") as! Bool!
if (onoroff != nil && onoroff == false)
{
self.checkForAgreement()
}
There is nothing swift or app delegate specific.
Initial defaults are set by calling registerDefaults:
on the standardUserDefaults
instance.
You can make this call multiple times and I'd recommend that you don't do it in the app delegate, instead register appropriate details at appropriate times in the app, so if you have 1 view controller / subsystem which uses certain defaults values then register the default values as part of the initialisation if that code.
Only if you have something which is used by multiple different parts of the code should you consider doing that in the app delegate, and then only if you don't have some other appropriate controller in which to do it.