Swift2:在iOS中反复检查时间间隔

时间:2017-03-29 18:10:30

标签: ios swift uibutton uicolor nstimeinterval

由于我有三个时间间隔,一个小于15分钟,第二个大于或等于15,第三个大于或等于 30.在我的情况下,我只检查一次条件。但我想检查每1分钟的条件。因为在一定的时间间隔后,我的所有按钮颜色应该只变成appYellowColor()。任何帮助都是值得的。谢谢预先!这是我的代码。

 if NetworkService.weAreOnline(true) && interval/60 < 15  {

       print("appYellowColor()")
       startButton.backgroundColor = UIColor.appYellowColor()

 }
 else if NetworkService.weAreOnline(true) && interval/60 >= 15  && interval/60 < 30 {

       print("grayColor()")
       startButton.backgroundColor = UIColor.grayColor()
       startButton.userInteractionEnabled = false

 }
 else if NetworkService.weAreOnline(true) && interval/60 >= 30 {

       print("redColor()")
       startButton.backgroundColor = UIColor.redColor()
       startButton.userInteractionEnabled = false

 }

3 个答案:

答案 0 :(得分:0)

支持重复任务的一种可能方法是将其逻辑放入一个函数(在您的情况下可以是checkIsOnline())并使用重复计划Timer 选项。

let timer = Timer(fire: Date.init(timeIntervalSinceNow: 60), interval: 60, repeats: true) { (timer) in
    self.checkIsOnline()
}

RunLoop.main.add(timer, forMode: .defaultRunLoopMode)

当应用程序进入后台时,您可以invalidate()计时器,并在应用程序即将激活时重新创建计时器。

答案 1 :(得分:0)

不需要代码,只需要理论。

您需要一个第四个计时器。一套一分钟(60秒)。如果与其他三个同时(或之后)启动,您只需要检查其他三个设置的标志。 (如果重复这三个中的任何一个或全部,请在管道中发送消息时让第四个定时器重置。

答案 2 :(得分:0)

我不知道swift但是在目标c中这样。如果你以特定的时间间隔继续调用特定的方法,你可以使用NSTimer。

首先你的Secound时间间隔大于或等于15.interval / 60&gt; = 15如果我们放置它不会去第三个,因为它总是如此,所以我们需要像这样保持

NetworkService.weAreOnline(true)&amp;&amp; interval / 60&gt; = 15&amp;&amp; interval / 60&lt; 30当它失败时它进入第三个条件

NSTimer *reachTimer;
//NSInteger secondsLeft;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //to stop the timer you can use secondsLeft
    //secondsLeft = 0;
    reachTimer = [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];

}

// This method is called every 300 secs

-(void)updateCounter:(NSTimer *)theTimer{

    // Build your login here

    //    //if you want to stop timer after 300 sec you can use below code
    //    secondsLeft = secondsLeft+5;
    //    if(secondsLeft>=300) // 60sec * 5min= 300
    //    {
    //        [reachTimer invalidate];// stop timer
    //    }

 }