3 回答
TA貢獻(xiàn)1876條經(jīng)驗 獲得超6個贊
不要將其NSObject視為Objective-C類,而應(yīng)將其視為可可/基礎(chǔ)類。即使您使用Swift而不是Objective-C,您仍在使用所有相同的框架。
兩種選擇:(1)將dynamic屬性添加到要作為選擇器引用的函數(shù)中:
dynamic func timerTick() {
self.angerLevel++
print("Angry! \(self.angerLevel)")
}
或(2)聲明Person為的子類NSObject,然后只需super.init()在初始化程序的開頭進(jìn)行調(diào)用:
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貢獻(xiàn)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) { }
}
TA貢獻(xiàn)1841條經(jīng)驗 獲得超3個贊
從XCode6 beta 6開始,您可以使用“動態(tài)”功能
dynamic func timerTick() { .... }
添加回答
舉報
