2014-09-20 78 views
0

是否可以在不使用NSTimer的情况下在Xcode 6中制作计时器?通过这个我的意思是你可以指定一个时间增量重复一定数量的代码?或者添加是否有可能使一个没有选择器的NSTimer选择一个不同的方法只是继续NSTimer在同一个方法中实现的代码?不使用NSTimer制作计时器(swift)

+0

“这可能吗?”问题总是有三个可能的答案:“是的,这是可能的”,“不,这是不可能的”和“也许,取决于你的意思”。您接受这三个答案中哪一个是正确和有帮助的?如果答案是“以上都不是”,那么你需要重申你的问题比“这可能吗?”更具体,你应该[编辑]这样做。 (如果其中一个实际上是你想要的,让我知道,我会把它作为答案来发布,所以你可以接受。) – 2014-09-20 03:11:00

回答

1

有可能构建您的文章中描述的方案。以下代码显示了我将如何模拟没有NSTimer的计时器的基本思路。请注意,默认情况下,代码使用NSThread,或者,您可以将useGCD设置为true,以使用GCD进行分派。

class Timer: NSObject { 

    var interval = 1.0 // Interval at 1.0 second 
    var useGCD = false // Set true to use GCD 

    var _isTimerRunning = false 

    func start() { 
     if !_isTimerRunning { 
      if !useGCD { 
       var thread = NSThread(target: self, selector: Selector("timerFunction"), object: nil) 
       thread.start() 
      } else { 
       var queue = dispatch_queue_create("com.example.threading", nil) 
       dispatch_async(queue, { 
        self.timerFunction() 
       }) 
      } 
      _isTimerRunning = true 
     } 
    } 

    func stop() { 
     _isTimerRunning = false 
    } 

    func timerFunction() { 
     while (_isTimerRunning) { 
      /* 
      * TO-DO Designated code goes here 
      */ 
      NSThread.sleepForTimeInterval(interval) // Interrupt 
     } 
    } 
} 

启动计时器:

var timer = Timer() 
timer.start() 

问候

0

你可以使用延迟功能吗?设置在一个循环内重复发射。

delay (5.0) { 

//code to execute here 

} 

func delay(delay:Double, closure:()->()) { 
     dispatch_after(
      dispatch_time(
       DISPATCH_TIME_NOW, 
       Int64(delay * Double(NSEC_PER_SEC)) 
      ), 
      dispatch_get_main_queue(), closure) 
    }