2017-03-29 2 views
1

Comme j'ai trois intervalles de temps, un est inférieur à 15 minutes, le deuxième supérieur ou égal à 15 et le troisième est supérieur ou égal à 30. Dans mon cas, je vérifie seulement une fois les conditions.Mais je veux vérifier les conditions pour chaque 1 minute.Parce que l'intervalle de temps certain toutes les couleurs de bouton pour moi devraient changer en appYellowColor() seulement.Toute aide est appréciable.Merci à l'avance! Voici mon code.Swift2: vérifier l'intervalle de temps à plusieurs reprises dans iOS

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 

} 
+0

L'interrogation est très mauvaise dans ce cas. Envisagez d'utiliser un * NetworkService * qui ** notifie ** lorsque la condition change. * Ne demandez pas, dites * – vadian

+0

Swift 2 est mort. Mettre à jour. – matt

+0

@Vinathy nvr Non –

Répondre

0

L'un des moyens possibles pour soutenir la tâche de répéter est de mettre sa logique en fonction (il peut être checkIsOnline() dans votre cas) et programmer un Timer avec répète l'option.

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

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

Vous pouvez invalidate() votre minuterie lorsque l'application va recréer arrière-plan et quand l'application est sur le point d'être actifs.

+0

S'il vous plaît pouvez-vous élaborer la solution @ nshuman.Thanks. –

0

Pas besoin de code, juste théorie.

Vous avez besoin d'un quatrième temporisateur. Un ensemble pour une seule minute (60 secondes). Si vous commencez en même temps (ou juste après) que vos trois autres, il vous suffit de vérifier un drapeau que les trois autres ensembles. (Et si tout ou partie de ces trois sont répétées, avoir cette quatrième minuterie réinitialiser les choses lors de l'envoi d'un message dans le pipeline

0

Je ne sais pas rapide, mais dans l'objectif c comme ça.Si vous appelez méthode particulière continuellement avec un temps particulier Vous pouvez utiliser NSTimer

Première chose que vos intervalles de temps Seconde supérieur ou égal à 15.interval/60> = 15 si nous plaçons cela, il ne va pas au troisième parce que c'est toujours vrai, nous devons garder comme ce

NetworkService.weAreOnline (true) & & intervalle/60> = 15 & & int erval/60 < 30 en cas d'échec, passe à la troisième condition

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 
    // } 

}