我有一个类Person被实例化多次。每个人都有自己的计时器。在我的初始化为Person我调用startTimer()。
class Person { var timer = NSTimer() func startTimer() { timer = NSTimer.scheduledTimerWithTimeInterval(1,target: self,selector: Selector("timerTick"),userInfo: nil,repeats: true) } func timerTick() { angerLevel++ println("Angry! \(angerLevel)") } ... ... }
所以我可能有一个Person []的数组中的3个实例。我收到一个错误:
2014-06-25 13:57:14.956 ThisProgram[3842:148856] *** NSForwarding: warning: object 0x113760048 of class '_TtC11ThisProgram6Person' does not implement methodSignatureForSelector: -- trouble ahead
我在别的地方读到我应该继承NSObject,但这是在Swift不是Obj-C。函数是在类中,所以我不知道该怎么做。
不要认为NSObject是一个Objective-C类,认为它是一个Cocoa / Foundation类。即使你使用Swift而不是Objective-C,你仍然使用所有相同的框架。
原文链接:https://www.f2er.com/swift/321489.htmldynamic func timerTick() { self.angerLevel++ print("Angry! \(self.angerLevel)") }
或者(2)将Person声明为NSObject的子类,然后在初始化器的开头调用super.init():
class Person: NSObject { var timer = NSTimer() var angerLevel = 0 func startTimer() { print("starting timer") timer = NSTimer.scheduledTimerWithTimeInterval(1,selector: "timerTick",repeats: true) } func timerTick() { self.angerLevel++ print("Angry! \(self.angerLevel)") } override init() { super.init() self.startTimer() } }