Henrik
Henrik

Reputation: 4044

Increment integer in NSUserDefaults

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

Answers (3)

Ahmed Safadi
Ahmed Safadi

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

Henrik
Henrik

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

Wez
Wez

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

Related Questions