我正在尝试根据NSCoding协议编码一些类属性:
func encode(with aCoder: NSCoder){
// a Date
aCoder.encode(startDate, forKey: "startDate");
// a ()->()
aCoder.encode(handler, forKey: "handler"); //1
// a Boolean
aCoder.encode(rightAway, forKey: "rightAway");
}
我已将问题隔离在标有1的行上。如果我评论该行,一切运行正常。如果我也运行该行,我得到unrecognized selector
。编码闭包时是否需要特别注意?提前谢谢。
答案 0 :(得分:1)
两行都会出现unrecognized selector
错误,因为Timer
和Swift闭包都不符合NSCoding
。符合协议的对象必须继承自NSObject
(无论如何都不是Swift闭包)并实现init(coder
和encode(with:)
为什么要对两者进行编码? Timer
是一个复杂的类,可以很容易地重新创建,闭包是一个实际上不包含任何有价值数据的函数。
PS:删除尾随的分号。这不是Objective-C