Swift、iOS-NSUSERDEFAULT的有效天数?只有在当天他们第一次打开应用程序时才增加int?
我正在尝试在NSUserDefaults中存储活动天数的int。以下是我如何增加NSUSerdefaults的: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
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:是的,你用对了,等等。不需要额外的代码。