Y类的对象X在Swift中不实现methodSignatureForSelector

前端之家收集整理的这篇文章主要介绍了Y类的对象X在Swift中不实现methodSignatureForSelector前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个类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()
    }
}
原文链接:https://www.f2er.com/swift/321489.html

猜你在找的Swift相关文章