编码/解码

时间:2018-03-01 10:46:29

标签: swift nscoding

我正在尝试根据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。编码闭包时是否需要特别注意?提前谢谢。

1 个答案:

答案 0 :(得分:1)

两行都会出现unrecognized selector错误,因为Timer和Swift闭包都不符合NSCoding。符合协议的对象必须继承自NSObject(无论如何都不是Swift闭包)并实现init(coderencode(with:)

为什么要对两者进行编码? Timer是一个复杂的类,可以很容易地重新创建,闭包是一个实际上不包含任何有价值数据的函数。

PS:删除尾随的分号。这不是Objective-C