У меня есть следующий код, который я пытаюсь вставить в Swift 3. Линия super.encodeWithCoder(aCoder)
дает проблемы. Все, что я делаю, дает ошибку.кодировка в Swift 3
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) дает ошибку Ожидаемое ';' separator
Что такое ошибка? – shallowThought
В то время как странное кодирование, это, скорее всего, потому, что я не знаком с переопределением этого - я всегда думал, что только представления, созданные в IB, используют init (coder :). Тем не менее, две вещи выпрыгивают на меня: (1) Вы не сообщили подробности о том, какую ошибку вы получаете. (2) Я видел ошибку сборки, потому что у вас есть код перед вызовом super.ecode (с помощью: coder). БОНУС: Я только что видел, что ваш код также пропускает двоеточие в этой строке. Я очень уверен, что определенно не буду строить. – dfd
"Линия' super.encodeWithCoder (aCoder) 'дает ошибку". Эта строка не существует в вашем примере Swift 3. Вы имеете в виду ваш вызов 'super.encode (с aCoder)' не скомпилируется? Как указывает dfd, это не будет компилироваться, потому что это должно быть 'super.encode (с: aCoder)'. – Rob