【发布时间】:2021-12-18 09:21:06
【问题描述】:
我想在我的 Swift 应用程序中跟踪条纹。我将以下代码放在场景委托中。这一切都运行得很愉快,但是如果我第二天从口袋里拿出我的应用程序,loginCount 并没有增加。
问题 1:我的代码有什么问题吗?
问题 2:如何模拟/单元测试“明天”,同时使用 UserDefault 元素?
let myCalendar = Calendar.current
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if launchedBefore{
var logins = UserDefaults.standard.integer(forKey: "loginCount")
if let lastLogin = UserDefaults.standard.object(forKey: "lastLoginDate") as? Date
{
if !myCalendar.isDateInToday(lastLogin)
{
UserDefaults.standard.set(logins + 1, forKey: "loginCount")
UserDefaults.standard.set(Date(), forKey: "lastLoginDate")
}
}
window.rootViewController = ViewController() // Main flow controller.
window.makeKeyAndVisible()
self.window = window
}
else
{
UserDefaults.standard.set(Date(), forKey: "lastLoginDate")
UserDefaults.standard.set(true, forKey: "launchedBefore")
UserDefaults.standard.set(1, forKey: "loginCount")
window.rootViewController = introViewController() // Onboarding controller.
window.makeKeyAndVisible()
self.window = window
}
【问题讨论】:
-
我在
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {中调用它我想知道如果我的应用程序在一夜之间在后台保持活动状态时不会调用它......?我应该从其他地方打电话吗?这很难,因为我不能让它过夜来测试我的预感! -
如果你登录你也需要注销,对吧?由于您的登录似乎只是关于写入 UserDefaults 您需要自己提供此逻辑。可能有一个快捷方式,但具体取决于您计算的确切时间,您可以将 UserDefaults 中的日期与当前日期进行比较,如果不一样,则您有一个“新”登录。
-
澄清一下,当我写的不一样时,我的意思不是同一天。
-
我写的代码使用
if !myCalendar.isDateInToday(lastLogin)检查增加计数的逻辑——只是昨晚没有增加。我的问题分为两部分:1)任何明显的原因 2)除了每天早上醒来并希望检查之外,还有其他方法可以测试我的代码 -
如果您没有任何特定的注销逻辑来重置launchBefore,则需要在检查launchBefore之前检查lastLoginDate。实际上,我想知道您是否甚至需要 launchBefore 或者您是否可以只检查日期?
标签: swift userdefaults