Я использую UserDefaults для хранения даты и времени, когда пользователь перезагружает страницу. Однако я обнаружил, что он не обновляется, даже если прошло время.
final class ModelData: ObservableObject {
@Published var lastLaunchDate: Date = UserDefaults.standard.value(forKey: "lastLaunch") as? Date ?? Date()
func getTimeStamp() -> Date {
let now_components = Calendar.current.dateComponents([.month, .day, .hour, .minute], from: Date())
let lastLaunch_components = Calendar.current.dateComponents([.month, .day, .hour, .minute], from: lastLaunchDate)
print(now_components.minute, lastLaunch_components.minute)
if now_components.minute != lastLaunch_components.minute {
lastLaunchDate = Date()
UserDefaults.standard.setValue(lastLaunchDate, forKey: "lastLaunch")
}
print(now_components.minute, lastLaunch_components.minute)
}
return lastLaunchDate
}
}
Поскольку я тестирую, я использую «минуту», чтобы облегчить свой тест. Я ожидаю, что при изменении минуты приведенный выше фрагмент кода обновит мои userDefaults.
struct HomeView: View {
@EnvironmentObject var modelData: ModelData
var body: some View {
Text("\(modelData.getTimeStamp())")
}
}
Я обнаружил, что просматриваю другую страницу, возвращаюсь в HomeView. Отметка времени вообще не обновлялась. Распечатал lastLaunchDate, тоже не обновилось.