Y类的对象X在Swift中不实现methodSignatureForSelector
发布时间:2020-12-14 06:12:48 所属栏目:百科 来源:网络整理
导读:我有一个类Person被实例化多次。每个人都有自己的计时器。在我的初始化为Person我调用startTimer()。 class Person { var timer = NSTimer() func startTimer() { timer = NSTimer.scheduledTimerWithTimeInterval(1,target: self,selector: Selector("timer
我有一个类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,你仍然使用所有相同的框架。
两个选项:(1)将动态属性添加到要作为选择器引用的函数: 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,selector: "timerTick",repeats: true) } func timerTick() { self.angerLevel++ print("Angry! (self.angerLevel)") } override init() { super.init() self.startTimer() } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |