我试图使用 Codable 来保存我正在创建的应用程序中的数据,但是当我将 Codable 放入我的结构中时,我不断收到错误:
类型“ReminderGroups”不符合协议“Decodable”
and
类型“ReminderGroups”不符合协议“Encodable”
struct ReminderGroups: Codable {
var contentsArray: [ReminderItem] = []
var reminderName: String = ""
var reminderItem: UIImage = #imageLiteral(resourceName: "Folder")
}
为了使类或结构符合协议,该类或结构的所有属性必须符合相同的协议。
UIImage
不符合Codable
,因此任何具有 type 属性的类或结构UIImage
也不会符合。您可以用图像数据或图像的 base64 表示形式替换图像(如String
).
我将向您展示第一个选项。我想你不想写这些if let
每次都是 s,所以让我们添加两个小extension
s to UIImage
and 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
}
}
}
Change reminderItem
的类型来自UIImage
to Data
.
从现在开始,当您需要访问图像时,请编写类似的内容imageView.image = reminderGroup.reminderItem.image
。当你需要保存一个实例时UIImage
to reminderItem
,写一些类似的东西reminderGroup.reminderItem = image.data!
(需要 bang 运算符(感叹号),因为计算属性data
是可选的)。
还要确保ReminderItem
确实符合Codable
。你没有提供该类型的声明,所以我不能说它是否符合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)