Чтобы класс или структура соответствовали протоколу, все свойства этого класса или структуры должны соответствовать одному и тому же протоколу.
UIImage
не соответствует Codable
, поэтому любой класс или структура, имеющие свойства типа UIImage
, также не будут соответствовать. Вы можете заменить изображение данными изображения или представлением изображения base64 (как String
).
Я покажу вам первый вариант. Я полагаю, что вы не хотите писать эти if let
каждый раз, поэтому давайте добавим два маленьких extension
к UIImage
и Data
, которые ускорят будущие преобразования.
extension UIImage {
var data: Data? {
if let data = self.jpegData(compressionQuality: 1.0) {
return data
} else {
return nil
}
}
}
extension Data {
var image: UIImage? {
if let image = UIImage(data: self) {
return image
} else {
return nil
}
}
}
Измените тип reminderItem
с UIImage
на Data
.
Теперь, когда вам нужно получить доступ к изображению, напишите что-то вроде imageView.image = reminderGroup.reminderItem.image
. А когда вам нужно сохранить экземпляр UIImage
в reminderItem
, напишите что-то вроде reminderGroup.reminderItem = image.data!
(необходим оператор взрыва (восклицательный знак), поскольку вычисляемое свойство data
является необязательным).
Также убедитесь, что ReminderItem
соответствует Codable
. Вы не предоставили объявление такого типа, поэтому я не могу сказать, соответствует ли оно.