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.
我正在尝试在 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.