定时器,#selector解释

时间:2018-01-22 17:06:53

标签: swift timer selector

我需要一个计时器,所以我使用了这段代码:

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

但我不理解#selector。我尝试了多次,但它不起作用。

2 个答案:

答案 0 :(得分:3)

selector()是您在每次设置的InterInterval中要添加的函数中添加的地方。在你的例子中,它每秒钟。

请记住,在Swift 4及更高版本中,如果要在选择器中调用它,则需要在函数前添加@objc

@objc func handleEverySecond() {
    print("Hello world!")
}

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

答案 1 :(得分:1)

选择器本质上是发送给对象的消息。它主要用于Objective-C,Swift试图摆脱它。但是,仍然有一些使用它的Objective-C API,包括计时器。

这就是选择器必须标记为@objc的原因,因为它需要暴露才能被看到。

因此,当您将选择器传递给计时器时,您告诉它在触发时将此消息发送给该类。

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

@objc func action() { print("timer fired") }

此外,重要的是要记住,您需要在函数范围之外保留对计时器的引用。