Ios NSCoding协议的变化

Ios NSCoding协议的变化,ios,swift,nscoding,Ios,Swift,Nscoding,我刚从8月份开始为iOs开发Swift应用程序。似乎发生了很多变化。现在我的NSCoding协议不再有效,我找不到哪里出了问题。实际上我知道,但我不知道如何用新协议实现我的旧代码。这是我以前的init(coder:NSCoder): 实际上,我不能使用NSCoder了,所以我无法检查是否有编码器,所以我是否必须设置默认值。问题是:当coder为nil时,什么是初始值设定项?是init还是init(编码者:NSCoder!)?如果是第二个,如何使用上面的代码执行我使用的操作 使用更新的协议,实现N

我刚从8月份开始为iOs开发Swift应用程序。似乎发生了很多变化。现在我的NSCoding协议不再有效,我找不到哪里出了问题。实际上我知道,但我不知道如何用新协议实现我的旧代码。这是我以前的
init(coder:NSCoder)


实际上,我不能使用
NSCoder了,所以我无法检查是否有编码器,所以我是否必须设置默认值。问题是:当coder为nil时,什么是初始值设定项?是
init
还是
init(编码者:NSCoder!)
?如果是第二个,如何使用上面的代码执行我使用的操作

使用更新的协议,实现
NSCoding
的Swift类在
initWithCoder
中接收
nil
是非法的。这将简化您的代码,因为
nil
编码器是一种例外情况,当程序无法创建解码器时,它应该采用另一种路径

如果确实有两条路径,可以将init分解为两个方法:

override init() {
    //Variables initialization
    super.init()
}

required init(coder: NSCoder) {
    //Defaults values
    super.init()
}
这对使用此类的Objective-C代码确实有影响,因为传递
nil
将使应用程序崩溃。Swift代码将是安全的,因为当您传递一个可选消息时,它将生成编译错误

override init() {
    //Variables initialization
    super.init()
}

required init(coder: NSCoder) {
    //Defaults values
    super.init()
}