【问题标题】:Increment integer in NSUserDefaultsNSUserDefaults 中的增量整数
【发布时间】:2016-05-24 14:40:32
【问题描述】:

有没有更优雅的方法来增加存储在用户默认值中的计数器?

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(defaults.integerForKey("counter")+1, forKey: "counter")

【问题讨论】:

  • 不,不是。但也许您可以在离开控制器或退出应用程序时使用本地计数器并写入用户默认值。

标签: swift integer nsuserdefaults


【解决方案1】:

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

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

这样使用

NSUserDefaults.incrementIntegerForKey("counter")

【讨论】:

  • 我继续对扩展的可能性印象深刻。我选择了这个版本,我将作为单独的答案发布。
  • 我会在这个函数的末尾添加一个defaults.synchronize() 语句。如果想在更短的时间内执行多个此类操作,则无法保证立即更新该值。
【解决方案2】:

这与 Wezly 提供的解决方案相同,但它重用了我的全局 defaults 对象并允许我修改值。

extension NSUserDefaults {
    func incrementIntegerForKey(key:String, by: Int) {
        let int = integerForKey(key)
        setInteger(int + by, forKey:key)
    }
}

这样使用(假设您在其他地方定义了默认值):

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

【讨论】:

    【解决方案3】:
    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 也带有当前增量的返回值

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 2022-11-20
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多