NSCoding协议的变化

时间:2014-11-10 00:03:10

标签: ios swift nscoding

我刚刚回到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!)?如果它是第二个,如何做我用来做的事情(使用上面的代码)?

1 个答案:

答案 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代码是安全的,因为它会生成一个编译错误,你传递一个可选的。