我正在尝试在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")
答案 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
非线程安全。