Richy Garrincha
Richy Garrincha

Reputation: 277

unable to loop through a Counter in Swift

I guys I have a working countdown timer which I can set manually and countdown from this value.

What I'm trying to achieve now though is set my INTERVALS counter to say 3 and loop through the countdown timer the amount of times that I set in this counter then when the last interval is complete the timer finishes

sounds straight forward in my head I know I need a loop somewhere but everything I have tried just hast worked this is my current code before adding a loop. Have tried adding a while statement instead of the if statement but that didn't do the job

I've now added this loop but still no joy. Anyone know how to do this?

func runIntervalTimer() {

timerForIntervals = NSTimer.scheduledTimerWithTimeInterval(1, target: self, 
selector: Selector("updateTimeInterval"), userInfo: nil, repeats: true)

}


func updateTimeInterval() {

do {

if intervalCountdown > 0 {
    intervalHasBeenSet = true
    intervalCountdown--
    IntervalTimer.text = String(format: "%02d:%02d", intervalCountdown/60, 
    intervalCountdown%60) }
} while intervalHasBeenSet == true

    intervalHasBeenSet = false
    intervalCountdown = 0
    IntervalTimer.text = String(format: "%02d:%02d", intervalCountdown/60, 
    intervalCountdown%60)



 }

@IBAction func InterValTimerIncrease(sender: AnyObject) {

 intervalCountdown++
 IntervalTimer.text = String(format: "%02d:%02d", intervalCountdown/60, 
 intervalCountdown%60)


 }



 @IBAction func IntervalTimerDecrease(sender: AnyObject) {

 intervalCountdown--
 IntervalTimer.text = String(format: "%02d:%02d", intervalCountdown/60,  
 intervalCountdown%60)
  }


@IBAction func IntervalStart(sender: AnyObject) {



    runIntervalTimer()



}

Upvotes: 0

Views: 214

Answers (1)

mdnghtblue
mdnghtblue

Reputation: 1117

You're probably in an infinite loop here:

  do {
      if intervalCountdown > 0 {
         intervalHasBeenSet = true
         intervalCountdown--
         IntervalTimer.text = String(format: "%02d:%02d", intervalCountdown/60, 
         intervalCountdown%60) }
  } while intervalHasBeenSet == true

Your condition is intervalHasBeenSet == true but it's never being set to false inside the loop, so it can never exit.

If you want the timer to count down each interval, I think all you need to do is:

  func updateTimeInterval() {
       println(intervalCountdown)
       if intervalCountdown > 0 {
         intervalCountdown--
         IntervalTimer.text = String(format: "%02d:%02d", intervalCountdown/60, 
         intervalCountdown%60) 
       }
  }

Because the updateTimeInterval should be called each interval by NSTimer, you shouldn't need a loop inside this function.

To have the timer count down multiple times, you need an extra variable (intervalNum):

  func updateTimeInterval() {
       println(intervalCountdown)
       if intervalCountdown > 0  && intervalNum > 0 {
         // countdown in the current interval
         intervalCountdown--
         IntervalTimer.text = String(format: "%02d:%02d", intervalCountdown/60, 
         intervalCountdown%60) 
       }
       else
       {
         // move on to the next interval
         intervalNum--
         intervalCountdown = 20 // or grab the original value from somewhere
       }

       if (intervalNum == 0)
       {   
           // stop the timer
           timerForIntervals.invalidate() 
       }
  }

Upvotes: 2

Related Questions