Xcode 调用自定义计时器类

Xcode 调用自定义计时器类,xcode,function,swift,nstimer,invoke,Xcode,Function,Swift,Nstimer,Invoke,我拼凑了一个计时器类,将NSTimer与我所有的ViewController一起使用,代码如下 import Foundation class Timer { var timer = NSTimer() var handler: (Int) -> () let duration: Int var elapsedTime: Int = 0 init(duration: Int, handler: (Int) -> ()) { self.d

我拼凑了一个计时器类,将NSTimer与我所有的ViewController一起使用,代码如下

import Foundation

class Timer {
   var timer = NSTimer()
   var handler: (Int) -> ()

   let duration: Int
   var elapsedTime: Int = 0

   init(duration: Int, handler: (Int) -> ()) {
      self.duration = duration
      self.handler = handler
   }

   func start() {
      self.timer = NSTimer.scheduledTimerWithTimeInterval(30,
          target: self,
          selector: Selector("chkProgress"),
          userInfo: nil,
          repeats: true)
   }

   func stop() {
      timer.invalidate()
   }

   @objc func chkProgress() {
      self.elapsedTime++

      self.handler(elapsedTime)

      if self.elapsedTime == self.duration {
          self.stop()
      }
   }

   deinit {
      self.timer.invalidate()
   }
}
然后在每个ViewController中,我可以检查时间进度,然后相应地显示一条消息。问题是当我试图调用它时

我试过了

var timer = Timer()
var timer = Timer(30)
var timer = Timer(30,30)
结果消息总是一样的,告诉我不能用类型(int,int)调用计时器,这是init中duration()的设置方式


我做错了什么?

参数不接受int,int。它们接受int和闭包

您还需要修复计时器代码

class Timer {
    var timer = NSTimer()
    var handler: (x:Int) -> ()

    let duration: Int
    var elapsedTime: Int = 0

    init(duration: Int, handler: (Int) -> ()) {
        self.duration = duration
        self.handler = handler
    }

    func start() {
        self.timer = NSTimer.scheduledTimerWithTimeInterval(30,
            target: self,
            selector: Selector("chkProgress"),
            userInfo: nil,
            repeats: true)
    }

    func stop() {
        timer.invalidate()
    }

    @objc func chkProgress() {
        self.elapsedTime++

        self.handler(x: elapsedTime)

        if self.elapsedTime == self.duration {
            self.stop()
        }
    }

    deinit {
        self.timer.invalidate()
    }
}
//定时器的实现

var t = Timer(duration: 30, handler:{ (x:Int) -> Void in
            //Do soemthing with x;
        });

您的
init
方法需要一个持续时间和一个处理程序,因此您应该使用匹配的参数调用它……看起来很棒;不过,请随意使用我的!有你可能喜欢的某些优点。