我有一个类Person,它被多次实例化。每个人都有自己的计时器。在init
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[]
所以我可能在2014-06-25 13:57:14.956 ThisProgram[3842:148856] *** NSForwarding: warning: object 0x113760048 of class '_TtC11ThisProgram6Person' does not implement methodSignatureForSelector: -- trouble ahead
数组中有3个Person实例。我收到一个错误:
NSObject
我在别处读到我应该从{{1}}继承,但这是在Swift而不是Obj-C。该功能在课堂内,所以我不知道该怎么做。
答案 0 :(得分:159)
不要将NSObject
视为Objective-C类,将其视为Cocoa / Foundation类。即使您使用Swift而不是Objective-C,您仍然使用所有相同的框架。
两个选项:(1)将dynamic
属性添加到要作为选择器引用的函数中:
dynamic 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, target: self, selector: "timerTick", userInfo: nil, repeats: true)
}
func timerTick() {
self.angerLevel++
print("Angry! \(self.angerLevel)")
}
override init() {
super.init()
self.startTimer()
}
}
答案 1 :(得分:32)
自XCode6 beta 6以来,您可以使用' dynamic' FUNC
dynamic func timerTick() { .... }