xcode - 调用自定义计时器类

标签 xcode function swift nstimer invoke

我拼凑了一个 Timer 类来将 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) 调用 Timer,这就是 init 中的uration() 的设置方式

我做错了什么?

最佳答案

参数不采用int、int。他们接受一个 int 和一个闭包。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

您还需要修复您的计时器代码;

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;
        });

关于xcode - 调用自定义计时器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650157/

相关文章:

ios - 'NSPersistentStore' 类型的值永远不能为 nil,不允许比较

swift - 特定 Xcode 版本的 ifdef?

ios - 如何在 AVFoundation 中混合/屏蔽视频?

xcode - 无法打开 Storyboard(com.apple.InterfaceBuilder 错误 -1。)

c++ - 指向具有 decltype 的函数的指针 vector

c - 函数声明与原型(prototype)的替代 (K&R) C 语法

xcode - KIF 测试失败 - View 未启用交互

javascript - 我可以在 TypeScript 中将函数限制为纯函数吗?

swift - 检查是否设置了带有名称的图像(WatchKit)

ios - 为什么 UILabel 上的首行缩进不适用于自定义字体?