编码在Swift 3中

时间:2017-01-07 18:50:48

标签: swift nscoding

我有以下代码,我试图将其放入Swift 3.行super.encodeWithCoder(aCoder)给出了问题。无论我做什么都会给出错误。

import Foundation
class ToDo: Task {
var done: Bool

@objc required init(coder aDecoder: NSCoder) {
    self.done = aDecoder.decodeObjectForKey("done") as! Bool
    super.init(coder: aDecoder)
}

@objc override func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeObject(done, forKey: "done")
    super.encodeWithCoder(aCoder)
}

init(name: String, done: Bool) {
    self.done = done
    super.init(name: name)
}
}

我正在尝试转换为Swift 3

我有这个

import Foundation

class ToDo: Task {
var done: Bool

@objc required init(coder aDecoder: NSCoder) {
    self.done = aDecoder.decodeObject(forKey: "done") as! Bool
    super.init(coder: aDecoder)
}

@objc override func encode(with aCoder: NSCoder) {
    aCoder.encode(done, forKey: "done")
    // THis line gives an error
    super.encode(with aCoder)

}

init(name: String, done: Bool) {
    self.done = done
    super.init(name: name)
}

}

这条线 super.encodeWithCoder(aCoder) 给出错误。 Swift没有提示,搜索也没有给出答案。

编辑以回应评论 原始代码“super.encodeWithCoder(aCoder)”给出错误类型'Task'的值没有成员'encodeWithCoder'

super.encode(带有aCoder)给出错误预期';'分离器

1 个答案:

答案 0 :(得分:0)

我认为应用崩溃的原因是你对Bool使用decodeObject()函数。

将代码更改为正确的函数会产生:

@objc required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.done = aDecoder.decodeBool(forKey: "done")
}

@objc override func encode(with aCoder: NSCoder) {
 aCoder.encode(done, forKey: "done")
}