Декодируемое наследование предотвращает синтез init декодера
у меня есть следующий Swift 4 Codable
класс, который наследуется от типа объекта Realm:
final class SearchResult: RealmSwift.Object, Codable {
@objc dynamic var name: String = ""
@objc dynamic var region: String = ""
enum CodingKeys: String, CodingKey {
case name = "name"
case region = "region"
}
}
ожидание здесь заключается в том, что init(from decoder: Decoder)
метод синтезируется так, что мне не нужно реализовывать его самостоятельно, что является огромным удобством. Однако не реализация этого приводит к следующей ошибке компилятора:
super.init isn't called on all paths before returning from initializer
есть три способа избавиться от ошибки компилятора, но ни один из них хорошо:
создать пустой
init(from decoder: Decoder)
метод, который просто называетsuper.init()
. Это, кажется, предотвращает синтезирование, то есть ничего не декодируется, потому что это просто пустой метод.выполнить весь
init(from decoder: Decoder)
способ вручную. Это работает, но теперь удовольствие от использованияCodable
практически ушли.удалить весь код, связанный с областью. Теперь Codable работает как ожидалось, но, Ну, теперь я не могу использовать Realm больше.
это кажется мне быстрой ошибкой, потому что она должна обнаружить, что init(from decoder: Decoder)
фактически реализуется, просто не вручную.
любые предложения или обходные пути, о которых я не знаю?
1 ответов
это, похоже, было разрешено в Xcode 9 GM, который теперь позволяет синтезировать инициализаторы с помощью Codable при наследовании от классов с required init()
метод.