gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:41:51 24 4
gpt4 key购买 nike

我正在尝试在 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 中设置一个 bool 值,但我不知道如何在每次新的一天、检测时区等时重置这个 bool 值。

我如何计算活跃天数?

使用扩展:

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.

关于ios - Swift,iOS- NSUserDefaults 活跃了几天?仅在当天他们第一次打开应用程序时才增加 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com