Swift 编码/解码

Swift 编码/解码,swift,nscoding,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(ri

我正试图根据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的行上。如果我评论这句话,一切都正常。如果我也运行该行,则会得到
无法识别的选择器。编码闭包时是否需要特别小心?提前感谢。

您会在两行中看到
无法识别的选择器
错误,因为
计时器
和快速关闭都不符合
NSCoding
。符合协议的对象必须继承自
NSObject
(Swift闭包无论如何都不会继承该对象),并实现
init(coder
encode(with:)

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


PS:删除后面的分号。这不是客观的-C

是的,确实不是有意的(打字错误)。我编辑了原始帖子。我可以重建计时器,但是闭包呢?我有一个类,需要传递一个函数来操作,当恢复时,我仍然需要该函数。我该如何解决这个问题?你不能存储闭包…这需要你存储应用程序的整个状态。闭包是什么你正在尝试恢复吗?