Swift、iOS- NSUserDefaults 活跃天数?仅在当天他们第一次打开应用程序时才增加 int?

Swift, iOS- NSUserDefaults for days active? Only increment int when it is the first time they opened app on THAT DAY?

我正在尝试在 NSUserDefaults 中存储一个整数,表示活动天数。这是我增加 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 但是它可以在 1 天内增加多次。

有办法吗? 我想在 NSUserDefaults 中设置一个布尔值,但我不知道如何在每次新的一天、检测时区等时重置这个布尔值。

我如何计算活跃天数?

使用扩展名:

NSUserDefaults.incrementIntegerForKey("daysActive")

首先,这个 NSDate 扩展会让事情变得更容易

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)")
        }
    }
}

Please note that this incrementIntegerForKey is NOT thread safe.