gpt4 book ai didi

ios - Swift - 一个月后重置数据

转载 作者:搜寻专家 更新时间:2023-11-01 06:52:58 24 4
gpt4 key购买 nike

我有一个应用程序可以汇总用户输入。此数据正在存储中。我希望在他开始使用该应用程序之日起一个月后将此用户数据重置为 0。一个月后,startDate 显然应该是数据重置的那一天。

到目前为止我有:

func checkIfClearData() {
let startDate: Date = Date()
var monthComponent = DateComponents()
monthComponent.month = 1

let theCalendar = Calendar.current
let endDate = theCalendar.date(byAdding: monthComponent, to: startDate)
}

我卡住了。如何包含 currentDate 以及如何正确使用此类函数,因为它每月只能调用一次?否则我认为 endDate 会增加并且永远不会达到。

最佳答案

使用下面的方法比较 startDate 和 endDate

if Date().timeIntervalSince(endDate) < 0 {
// endDate ahead
} else {
// endDate expired
}

入门示例

class DataTimer {

static var shared = DataTimer()

var startDate: Date!
var endDate: Date!

private init() {
check()
}

func check() {
guard
let startDate = UserDefaults.standard.object(forKey: "kStartDate") as? Date,
let endDate = Calendar.current.date(byAdding: .month, value: 1, to: startDate)
else {
self.resetDates()
return
}

var interval = Date().timeIntervalSince(endDate)
guard interval < 0 else {
self.resetUserData()
self.resetDates()
return
}

self.startDate = startDate
self.endDate = endDate

// log remaining time
interval = abs(interval)
let log: [Int] = [86400.0, 3600.0, 60.0].map { value in
guard interval > value else { return 0 }

let returnValue = Int(floor(interval / value))
interval.formTruncatingRemainder(dividingBy: value)
return returnValue
}
print("Remaining: \(log[0])d \(log[1])h \(log[2])m \(Int(interval))s")
}

private func resetUserData() { }

private func resetDates() {
self.startDate = Date()
self.endDate = Calendar.current.date(byAdding: .month, value: 1, to: startDate)!
UserDefaults.standard.set(startDate, forKey: "kStartDate")
}
}

用法-1

DataTimer.shared.check()

Usage-2 每次应用在 AppDelegate.swift

中启动/进入前台时
func applicationDidBecomeActive(_ application: UIApplication) {
DataTimer.shared.check()
}

关于ios - Swift - 一个月后重置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55895053/

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