Swift、iOS-NSUSERDEFAULT的有效天数?只有在当天他们第一次打开应用程序时才增加int?

Swift、iOS-NSUSERDEFAULT的有效天数?只有在当天他们第一次打开应用程序时才增加int?,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我正在尝试在NSUserDefaults中存储活动天数的int。以下是我如何增加NSUSerdefaults的: extension NSUserDefaults { class func incrementIntegerForKey(key:String) { let defaults = standardUserDefaults() let int = defaults.integerForKey(key) defaults.setIn

我正在尝试在NSUserDefaults中存储活动天数的int。以下是我如何增加NSUSerdefaults的:

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

NSUserDefaults.incrementIntegerForKey("daysActive")
我只需要在这是(不是第一次打开应用程序)但他们当天第一次打开应用程序的情况下,在此键处增加int。最初我想调用它是
viewDidLoad
,但是它可以在一天内增加多次

有办法做到这一点吗? 我想在NSUserDefaults中设置一个布尔值,但我不知道如何在每一天都重置这个布尔值,检测时区,等等

我如何计算活动天数

使用扩展名:

NSUserDefaults.incrementIntegerForKey("daysActive")

首先,这个扩展将使事情变得更容易

extension NSDate {
    var isToday: Bool {
        let now = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: NSDate())
        let this = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: self)
        return now.year == this.year && now.month == this.month && now.day == this.day
    }
}
现在,您的扩展可以编写如下

extension NSUserDefaults {
    class func incrementIntegerForKey(key:String) {
        let lastIncreased = NSUserDefaults.standardUserDefaults().valueForKey("lastCheck_\(key)")
        let alreadyIncreasedToday = lastIncreased?.isToday ?? false

        if !alreadyIncreasedToday {
            let counter = NSUserDefaults.standardUserDefaults().integerForKey(key)
            NSUserDefaults.standardUserDefaults().setInteger(counter + 1, forKey: key)
            NSUserDefaults.standardUserDefaults().setValue(NSDate(), forKey: "lastCheck_\(key)")
        }
    }
}
请注意,此
incrementintegerworky
不是线程安全的


您应该在userdefaults中存储递增的最后一天。然后测试它是否与递增前的日期相同。首先,我需要将一个新密钥作为上次检查是否正确的NSDate吗?@skyguy:My extension
IncrementIntegerWorkey
已经这样做了。我更新了我的问题,说明了我是如何实现您的扩展的(显然要到第二天才能测试)但是谢谢你,我认为它是有效的——我是正确地使用它吗?还是我需要做些别的事情first@skyguy:是的,你用对了,等等。不需要额外的代码。