Reputation: 4044
Is there a more elegant way to increment a counter stored in user defaults?
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(defaults.integerForKey("counter")+1, forKey: "counter")
Upvotes: 6
Views: 2562
Reputation: 4590
extension UserDefaults {
class func incrementIntegerForKey(key: String) -> Int {
let defaults = UserDefaults()
let int = defaults.integer(forKey: key)
defaults.setValue(int + 1, forKey: key)
return int + 1
}
}
Swift 5.1 also with return value for current increment
Upvotes: 1
Reputation: 4044
This is the same as the solution offered by Wezly, but it reuses my global defaults
object and and allows me to modify the value.
extension NSUserDefaults {
func incrementIntegerForKey(key:String, by: Int) {
let int = integerForKey(key)
setInteger(int + by, forKey:key)
}
}
Used like so (assuming you've defined defaults elsewhere):
defaults.incrementIntegerForKey("counter", by: -3)
Upvotes: 5
Reputation: 10712
No but if you do this a lot it might make a nice extension, something like this.
extension NSUserDefaults {
class func incrementIntegerForKey(key:String) {
let defaults = standardUserDefaults()
let int = defaults.integerForKey(key)
defaults.setInteger(int+1, forKey:key)
}
}
Usage like this
NSUserDefaults.incrementIntegerForKey("counter")
Upvotes: 10