我刚刚回到8月份开始为iOs开发一个Swift应用程序。似乎发生了很多变化。现在我的NSCoding协议已经无效了,我找不到错误的地方。其实我这样做但我不知道如何使用新协议实现我的旧代码。这是我以前的init(coder: NSCoder)
:
required init(coder: NSCoder!) {
if (coder != nil) {
//Variables initialization
}
else {
//Defaults values
}
super.init()
}
实际上,我不能再使用NSCoder!
所以我无法检查是否有编码器,所以如果我必须设置默认值。问题是:当编码器为零时,调用什么初始值设定项?是init
还是init(coder: NSCoder!)
?如果它是第二个,如何做我用来做的事情(使用上面的代码)?
答案 0 :(得分:2)
使用更新的协议,实现NSCoding
的Swift类在nil
中接收initWithCoder
是违法的。这应该简化您的代码,因为nil
编码器是一种例外情况,并且程序在无法创建解码器时应采用替代路径。
如果你真的有两条路径,你可以将你的init分成两种方法:
override init() {
//Variables initialization
super.init()
}
required init(coder: NSCoder) {
//Defaults values
super.init()
}
这对使用此类的Objective-C代码有影响,因为传递nil
会使应用程序崩溃。 Swift代码是安全的,因为它会生成一个编译错误,你传递一个可选的。