2016-02-05 138 views
0

我有一个的NSTimer如下对象:如何把超时时间设置为NSTimer?

var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateTimer", userInfo: nil, repeats: true) 

我希望把超时到我的定时器。也许你知道android中的postdelayed方法。我想要相同的东西的迅速版本。我怎样才能做到这一点 ?

+0

超时应该做什么?对于那些不知道postdelayed的用户。在x时间之后,计时器应该停止? –

+0

是不是定义了一个定时器? – Russell

+0

我想延迟计时器3秒。那么它可以再次工作 – sorunluadam

回答

6

NSTimer不适用于可变间隔时间。你用一个指定的延迟时间来设置它,你不能改变它。比停止并开始NSTimer每一次更优雅的解决方案是使用dispatch_after

Matt's answer借鉴:

// this makes a playground work with GCD 
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

struct DispatchUtils { 

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


class Alpha { 

    // some delay time 
    var currentDelay : NSTimeInterval = 2 

    // a delayed function 
    func delayThis() { 

     // use this instead of NSTimer 
     DispatchUtils.delay(currentDelay) { 
      print(NSDate()) 
      // do stuffs 

      // change delay for the next pass 
      self.currentDelay += 1 

      // call function again 
      self.delayThis() 
     } 
    } 
} 

let a = Alpha() 

a.delayThis() 

尝试在一个操场。 它将为函数的每次传递应用不同的延迟。

+1

这对我来说非常有帮助。感谢您的关注 – sorunluadam