这里有一个简单的类,每秒可多次打印“ test”:
import Foundation
class TestClass {
static var count = 0
static var timer = Timer()
init() {
TestClass.start()
}
static func start() {
TestClass.timer = Timer.scheduledTimer(timeInterval: 1.0/5.0, target: self, selector: #selector(printTest), userInfo: nil, repeats: true)
}
@objc func printTest() {
print(count)
count += 1
}
}
我将函数start
设置为变量timer
static
,以便以后可以从另一个类启动和停止计时器
在我的主要ViewController文件中,我只是说了一个新的TestClass
:
let _ = TestClass()
然后我尝试通过以下方式停止并启动计时器:
if /*something*/ {
TestClass.timer.invalidate()
}
if /*something else*/ {
TestClass.start()
}
但是,当我运行项目时,控制台中出现多个错误:
NSForwarding: warning: object 0x10eaab580 of class 'DeleteMe.TestClass' does not implement methodSignatureForSelector: -- trouble ahead
和
Unrecognized selector +[DeleteMe.TestClass printTest]
我需要在课堂上修改某些内容来解决错误吗?
答案 0 :(得分:0)
问题在于start
是static
方法,因此self
是类,而不是实例。这意味着printTest
也必须是static
。
但是为什么这些是静态的?为什么创建一个仅调用静态start
方法的实例?
摆脱init
,只需使用TestClass.start()
。
或将所有内容设置为适当的实例属性和实例方法。然后,您可以为每个TestClass
各自的计时器创建单独的实例。