ios - 如何在 Swift 中的自定义类中初始化 Timer?

标签 ios swift timer swift3

<分区>

我做了一个简单的计时器应用程序,但是,现在我想把它做得更好,我想为计时器控件编写一个类:

class Cronometer{
    private var counter:Int = 0
    private var timer:Timer = Timer()
    private var state:Bool = true

   func initCronometer(){
        if self.state{
            self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: Selector("onTick"), userInfo: nil, repeats: true)
        }else{
            self.timer.invalidate()
        }
        self.state = !self.state
    }

    func onTick(){
        self.counter += 1
        print(self.counter)
    }
}

但是选择器参数在使用自定义方法的类中不起作用。我不想像以前那样将它放在 ViewController 中。

我试试

self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: Selector(("onTick")), userInfo: nil, repeats: true)

self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.onTick), userInfo: nil, repeats: true)

...但还是不行

那么,在 Timer 初始化器中将类方法分配为选择器的最佳方法是什么?

非常感谢!

最佳答案

Timer 是基础类型 NSTimer 的叠加类型, 它使用 Objective-C 消息传递来调用计时器目标。 因此,目标方法必须可用于 Objective-C。

您有以下选择:

  • 只用 @objc 标记 onTick() 方法(正如 Matt 已经说过的)。
  • 使 Cronometer 类成为 NSObject 的子类。
  • 在 iOS 10/macOS 10.12 上,您可以使用更新的基于 block 的计时器 API:

    self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) {
       _ in self.onTick()
    }
    

关于ios - 如何在 Swift 中的自定义类中初始化 Timer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622721/

相关文章:

c# - 通过定时器C#删除ListView中的项目

c++ - 在 C++ 中重复跟踪计时器

ios - 使用键盘动画调整约束大小

ios - Swift 中的 Google 登录问题

ios - iOS应用程序-如何仅为iOS 8用户添加iOS 8功能,同时仍支持所有iOS 7用户

ios - 捆绑 ID 以 `org` 开头

ios - Spritekit 游戏崩溃(因为 SKLightNode 线程问题?)

java - 是否可以使图形对象最终用于内部循环?

javascript - React Native onPanResponderMove 似乎很少被调用

ios - Objective-C中基于触摸的图像处理