Сравнение дат всегда возвращает значение true — Swift

#swift

Вопрос:

Я хочу отследить, когда пользователь в последний раз обновлял api, поэтому я решил сделать это так:

 @AppStorage("lastTimeUserRefreshedApi") var lastTimeUserRefreshedApi: Date = Date()

func canUserRefreshAPI() -> Bool {
    let readyToBeRefreshed: Date = lastTimeUserRefreshedApi.addingTimeInterval(5) // in seconds
    let currentTime: Date = Date()
    var canUserRefresh: Bool = false
    
    if(currentTime > readyToBeRefreshed) {
        canUserRefresh = true
        lastTimeUserRefreshedApi = lastTimeUserRefreshedApi.addingTimeInterval(5)
    } else {
        canUserRefresh = false
    }
    
    return canUserRefresh
}
 

Проблема в том, что он всегда возвращается истинным, но почему? Также есть ли более простой способ сделать это?

Спасибо

Редактировать:

Это расширение, которое я использую, чтобы иметь возможность хранить дату в @AppStorage:

 extension Date: RawRepresentable {
    public var rawValue: String {
        self.timeIntervalSinceReferenceDate.description
    }
    
    public init?(rawValue: String) {
        self = Date(timeIntervalSinceReferenceDate: Double(rawValue) ?? 0.0)
    }
}
 

Комментарии:

1. Что говорит вам отладчик, когда вы проверяете значения currentTime и readyToBeRefreshed ?

2. @проверка jnpdx

3. @Альберт, ты пытаешься обновлять его каждые пять секунд?

4. Вы должны добавить пять секунд к текущему времени, а не добавлять к последнему времени userrefreshedapi

5. @LeoDabus да, не уверен, что вы думаете о таймере, но я пробовал с таймером, но дело в том, что, когда пользователь выходит из фонового режима на следующий день и хочет обновиться, ему/ей приходится ждать этого времени, и это неприменимо. Поэтому я решил сохранить метку времени

Ответ №1:

Вы делаете это намного сложнее, чем следовало бы. Просто сохраните дату «истечения срока действия». Когда вы читаете это, просто сравните, прошло оно или нет.

 @AppStorage("expiration")
var expiration: Date = Date(timeIntervalSinceNow: 5)

func canUserRefreshAPI() -> Bool {
    let now = Date()
    if expiration < now {
        expiration = Date(timeIntervalSinceNow: 5)
        return true
    } else {
        return false
    }
}