【问题标题】:Changes on NSCoding protocolNSCoding 协议的变化
【发布时间】:2014-11-10 00:03:09
【问题描述】:

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

required init(coder: NSCoder!) {
    if (coder != nil) {
        //Variables initialization
    }
    else {
        //Defaults values
    }
    super.init()
}

实际上,我不能再使用NSCoder!,所以我无法检查是否有编码器,所以我是否必须设置默认值。问题是:当 coder 为 nil 时,调用什么初始化程序?是 init 还是 init(coder: NSCoder!) ?如果是第二个,我该怎么做(使用上面的代码)?

【问题讨论】:

    标签: ios swift nscoding


    【解决方案1】:

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

    如果你真的有两条路径,你可以将你的 init 分成两种方法:

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

    这确实对使用此类的 Objective-C 代码有影响,因为传递 nil 会使应用程序崩溃。 Swift 代码将是安全的,因为如果您传递一个可选参数,它将产生编译错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多