Swift,iOS- NSUserDefaults几天活跃?只有当他们第一次在那天打开应用程序时才增加int?

时间:2016-06-10 15:43:39

标签: ios swift nsuserdefaults

我正在尝试在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但是可以在1天内多次递增。

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

我如何计算活跃的日子?

使用扩展程序:

NSUserDefaults.incrementIntegerForKey("daysActive")

1 个答案:

答案 0 :(得分:1)

首先,这个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)")
        }
    }
}
  

请注意,此incrementIntegerForKey 线程安全。