如何读取定时器的值?迅捷

Posted

技术标签:

【中文标题】如何读取定时器的值?迅捷【英文标题】: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
    

【问题讨论】:

【参考方案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 添加到我的值。然后,让计时器继续。

以上是关于如何读取定时器的值?迅捷的主要内容,如果未能解决你的问题,请参考以下文章

STM32定时器编码器接口模式

hutool的定时器如何读取application文件

STM32定时器编码器模式怎么使用

探查器如何对正在运行的程序进行采样?

如何让程序定时到数据库中读取数据

如何用java实现一个计时器来定时读取和写入数据库?急!