3 回答

TA貢獻1876條經(jīng)驗 獲得超6個贊
不要將其NSObject視為Objective-C類,而應將其視為可可/基礎類。即使您使用Swift而不是Objective-C,您仍在使用所有相同的框架。
兩種選擇:(1)將dynamic屬性添加到要作為選擇器引用的函數(shù)中:
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條經(jīng)驗 獲得超5個贊
我在嘗試使用let encodedArchive = NSKeyedArchiver.archivedDataWithRootObject(archive) as NSData存檔是自定義類的數(shù)組時遇到了類似的錯誤 。我發(fā)現(xiàn)將自定義類聲明為NSObject和NSCoding的子類可以解決問題。它需要更多的行才能符合NSCoding的協(xié)議,因此,它看起來像這樣:
class Person: NSObject, NSCoding {
init() {
super.init()
}
func encodeWithCoder(_aCoder: NSCoder) { }
}
添加回答
舉報