У меня есть следующий класс 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
Есть три способа git избавиться от ошибки компилятора, но ни один из них не является хорошим:
-
Внедрите пустой метод
init(from decoder: Decoder)
, который просто вызываетsuper.init()
. Это, по-видимому, предотвращает синтез, означая, что ничто не становится фактически декодированным, потому что его просто пустой метод. -
Внесите весь метод
init(from decoder: Decoder)
вручную. Это работает, но теперь удовольствие от использованияCodable
в значительной степени ушло. -
Удалите все связанные с Realm коды. Теперь Codable работает так, как ожидалось, но теперь я больше не могу использовать Realm.
Это похоже на ошибку Swift для меня, потому что она должна обнаруживать, что init(from decoder: Decoder)
фактически реализуется, просто не вручную.
Любые предложения или обходные пути, о которых я не знаю?