如何以每 1 秒的延迟运行 for 循环?

Posted

技术标签:

【中文标题】如何以每 1 秒的延迟运行 for 循环?【英文标题】:How to run for loop with delay of every 1 sec? 【发布时间】:2018-03-16 10:54:45 【问题描述】:

我正在为 Apple 的 Watch 应用程序实现闹钟功能。所以在这里我必须将当前时间与用户时间进行比较,并且我必须每 1 秒获取一次当前时间,这样我就实现了如下代码,但这不起作用。任何机构都可以在Objective-C中发布适当的代码吗?

for (int i=0; i<86400; i++)
  
    if ([getTotalDate isEqualToString:self.curTime])
        
            NSLog(@"It's Alarm Time");
            [self presentControllerWithName:@"FifthViewController" context:nil];
            break;
        
    else
        
            NSLog(@"not alarm time");
            //[self currentTime];
        

【问题讨论】:

你不能只使用 NSTimer 来循环延迟时间吗? 为什么要使用for循环? 【参考方案1】:

最好的方法是为特定时间设置本地通知。你应该在didReceiveLocalNotification 中打开FifthViewController。您可以查看以下答案以了解如何使用本地通知。

How to implement LocalNotification using objective C?

【讨论】:

嗨..谢谢你的回复..实际上我正在为苹果手表实现这个。那么您能否建议我如何通过 Apple Watch 的本地通知实现警报功能.. 这里没有提到,所以我怎么知道它是苹果手表程序。您可以查看此链接以获取 Apple Watch 通知。 natashatherobot.com/watchkit-actionable-notifications【参考方案2】:

尝试使用步幅

这是 Apple 提供的解决方案(循环迭代时间限制):Swift control flow with Stride

某些用户可能希望其 UI 中的刻度线更少。他们可能更喜欢每 5 分钟一个分数。使用 stride(from:to:by:) 函数跳过不需要的标记。

let minuteInterval = 5
for tickMark in stride(from: 0, to: minutes, by: minuteInterval) 
    // render the tick mark every 5 minutes (0, 5, 10, 15 ... 45, 50, 55)




let hours = 12
let hourInterval = 3
for tickMark in stride(from: 3, through: hours, by: hourInterval) 
    // render the tick mark every 3 hours (3, 6, 9, 12)

【讨论】:

@Tj3n - 是的,亲爱的,我知道,但是 OP 添加了标签 swift,他也可以在 Objective-C 项目中使用 Swift 代码。而且苹果可能没有在 Objective-C 中提供这个解决方案。所以如果 OP 可以在 Objective-C 项目中注入 Swift 代码,那么这对他会有帮助。 嗨..感谢您的回复..实际上我正在使用Objective C进行开发,那么目标c中是否也存在这种跨步?如果可以,请在目标 c 中发布代码..

以上是关于如何以每 1 秒的延迟运行 for 循环?的主要内容,如果未能解决你的问题,请参考以下文章

如何延迟 For 循环直到声音在 Swift 中播放完毕

JS中如何解决for循环中的延迟执行问题

如何在 Actionscript 中添加处理超过 15 秒的时间延迟?

如何延迟循环周期?

如何在每次通过 for 循环时增加动画延迟

从 AWS SQS 获取消息的延迟