Deserialize:

4 имеетКодируемый и это круто НоUIImage не соответствует ему по умолчанию. Как мы можем сделать это?

Я пробовал сsingleValueContainer а такжеunkeyedContainer

extension UIImage: Codable {
  // 'required' initializer must be declared directly in class 'UIImage' (not in an extension)
  public required init(from decoder: Decoder) throws {
    let container = try decoder.singleValueContainer()
    let data = try container.decode(Data.self)
    guard let image = UIImage(data: data) else {
      throw MyError.decodingFailed
    }

    // A non-failable initializer cannot delegate to failable initializer 'init(data:)' written with 'init?'
    self.init(data: data)
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.singleValueContainer()
    guard let data = UIImagePNGRepresentation(self) else {
      return
    }

    try container.encode(data)
  }
}

Я получаю 2 ошибки

'required' инициализатор должен быть объявлен непосредственно в классе 'UIImage' (не в расширении)Неисправный инициализатор не может делегировать отказавшему инициализатору init (data :), записанному с init?

Обходной путь должен использовать обертку. Но есть ли другие способы?

Ответы на вопрос(4)

Ваш ответ на вопрос