Для метода encode(_:, forKey:)
требуется тип, соответствующий Encodable
, иначе как он может знать, как кодировать этот входной аргумент?Поэтому вам нужно либо изменить параметр универсального типа, чтобы он требовал соответствия Encodable
/ Codable
, либо не кодировать переменную data
, если она не должна быть частью вашего JSON (как кажется, это не так).в любом случае часть декодированного JSON).
Просто настройте ClassB
и ClassC
на Codable
, и тогда изменение ограничения типа не будет проблемой, и вам даже не понадобятся пользовательскиеinit(from:)
и encode(to:)
методы.
class ClassA<T: Codable>: Codable {
// MARK: - Properties
let title: String
let data: [T] // data is an array of either Codable objects of ClassB or ClassC.
}
Не имеет отношения к вашей проблеме, но вы не должны заставлять классы Swift наследовать от NSObject
, если вам это не нужно для совместимости с Obj-C.Классы Swift не должны наследоваться от базового класса в отличие от Obj-C.