在NSUserDefaults中增加整数值

5
有没有一种更优雅的方式来增加存储在用户默认设置中的计数器?
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(defaults.integerForKey("counter")+1, forKey: "counter")

1
不是。但也许你可以使用本地计数器,在离开控制器或退出应用程序时写入用户默认设置。 - vadian
3个回答

10

不过如果您经常这样做,它可能会成为一个不错的扩展功能,就像这样。

extension NSUserDefaults {
    class func incrementIntegerForKey(key:String) {
        let defaults = standardUserDefaults()
        let int = defaults.integerForKey(key)
        defaults.setInteger(int+1, forKey:key)
    }
}

像这样使用

NSUserDefaults.incrementIntegerForKey("counter")

我对扩展的可能性仍然印象深刻。我选择了其中一个版本,我将其作为单独的答案发布。 - Henrik
我会在这个函数的末尾添加一个 defaults.synchronize() 语句。如果想要在较短的时间内执行多个此类操作,则不能保证该值会立即更新。 - Vlad Rusu

5
这与Wezly提供的解决方案相同,但它重用了我的全局defaults对象,并允许我修改该值。
extension NSUserDefaults {
    func incrementIntegerForKey(key:String, by: Int) {
        let int = integerForKey(key)
        setInteger(int + by, forKey:key)
    }
}

使用方法如下(假设您已在其他地方定义了默认值):

defaults.incrementIntegerForKey("counter", by: -3)

1
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 还增加了当前递增值的返回值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接