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