加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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()
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读