【问题标题】:How to read the values of timer? Swiftui如何读取定时器的值?迅捷
【发布时间】:2021-07-15 14:40:25
【问题描述】:

我正在尝试在 swift UI 中创建下一个条件:

如果计时器(小时)显示 23,则试用 = 试用 + 1。 但是,它说我的代码永远不会被执行。那么,有没有可能做到这一点?

在我的应用程序中,用户选择了距离截止日期的天数,我正在尝试通过计时器对截止日期进行倒计时。我需要一个解决方案来读取计时器中的小时数,以便在计时器到达新的一天时保存一个新值。

也许您有其他解决方案(日历除外,因为我无法将它添加到我的应用中),我会很高兴听到他们的消息!

附:我的代码示例:

/////Timer
 let timer = Timer.publish(every: 3600, on: .main, in: .common).autoconnect()

/////Timer Func
func dayString(time: Int) -> String {
    let days   = Int(time) / 86400
    let hours   = Int(time) / 3600 % 24
    return String(format:"%02i", days)
    if hours == 23 {
        tryout = tryout + 1
    }
}

【问题讨论】:

    标签: swiftui timer apple-watch watchos


    【解决方案1】:

    我不确定您要做什么,但您提到您的功能存在问题,我可以提供帮助。

    你有:

    /////Timer Func
    func dayString(time: Int) -> String {
        let days = Int(time) / 86400
        let hours = Int(time) / 3600 % 24
        return String(format:"%02i", days) // <- function returns
        if hours == 23 {                   // <- this will never run
            tryout = tryout + 1
        }
    }
    

    因为你是从你的函数返回的,它之后的代码永远不会被执行,这就是编译器告诉你的。您需要将返回移动到最后一个表达式

    /////Timer Func
    func dayString(time: Int) -> String {
        let days = Int(time) / 86400
        let hours = Int(time) / 3600 % 24
        if hours == 23 {
            tryout = tryout + 1
        }
        return String(format:"%02i", days)
    }
    

    【讨论】:

    • 它让我的代码运行起来。然而,它导致了问题,当时间到了 23 点时它就停止了,一切都冻结了。我希望计时器像这样工作:计时器到 23 小时,检查小时 == 23,如果小时 == 23,只需将 +1 添加到我的值。然后,让计时器继续。
    猜你喜欢
    • 2015-07-26
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多