不符合协议“NSCoding” - Swift 3

9

我看到了几个与我的问题类似的问题,但是那些都涉及Swift 2/1,而我目前正在使用Swift 3。我相信苹果公司对它进行了轻微的更改。

class Person: NSObject, NSCoding {

    var signature: UIImage

    init(signature: UIImage) {
        self.signature = signature
    }

    required convenience init(coder aDecoder: NSCoder) {
        let signature = aDecoder.decodeObject(forKey: "signature") as! UIImage
        self.init(signature: signature)
    }

    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encode(signature, forKey: "signature")
    }

}

你会注意到Swift 3现在强制我使用required convenience init(而不是required init(。可能与此有关。

我该如何解决这个问题?谢谢!


你尝试过在Xcode中使用“编辑->转换->到当前Swift语法”吗?那应该会自动解决问题。 - Martin R
1个回答

33

在Swift 3中,encode方法已被重命名为

func encode(with aCoder: NSCoder) 

当你遇到不符合规范的错误时,你可以轻松找出缺失哪些必需方法

  • 按下⌘B来构建代码。
  • 按下⌘4来显示问题导航器。
  • 点击问题行前面的披露三角形。

完美运行。一旦SO允许我这样做,我将在6分钟内接受。 - Pranav Wadhwa
我简直不敢相信我浪费了两天的时间在这件事上.. 讨厌你,Swift,为什么要做出这样的改变.. 但感谢你,伙计,因为你拯救了我的局面。 :) 非常感谢! - Kunal Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接