3 回答
TA贡献1876条经验 获得超6个赞
不要将其NSObject视为Objective-C类,而应将其视为可可/基础类。即使您使用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()
}
}
TA贡献1780条经验 获得超5个赞
我在尝试使用let encodedArchive = NSKeyedArchiver.archivedDataWithRootObject(archive) as NSData存档是自定义类的数组时遇到了类似的错误 。我发现将自定义类声明为NSObject和NSCoding的子类可以解决问题。它需要更多的行才能符合NSCoding的协议,因此,它看起来像这样:
class Person: NSObject, NSCoding {
init() {
super.init()
}
func encodeWithCoder(_aCoder: NSCoder) { }
}
添加回答
举报