Декодируемое наследование предотвращает синтез 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

есть три способа избавиться от ошибки компилятора, но ни один из них хорошо:

  1. создать пустой init(from decoder: Decoder) метод, который просто называет super.init(). Это, кажется, предотвращает синтезирование, то есть ничего не декодируется, потому что это просто пустой метод.

  2. выполнить весь init(from decoder: Decoder) способ вручную. Это работает, но теперь удовольствие от использования Codable практически ушли.

  3. удалить весь код, связанный с областью. Теперь Codable работает как ожидалось, но, Ну, теперь я не могу использовать Realm больше.

это кажется мне быстрой ошибкой, потому что она должна обнаружить, что init(from decoder: Decoder) фактически реализуется, просто не вручную.

любые предложения или обходные пути, о которых я не знаю?

1 ответов


это, похоже, было разрешено в Xcode 9 GM, который теперь позволяет синтезировать инициализаторы с помощью Codable при наследовании от классов с required init() метод.