Joh*_*Tee 2 structure swift codable decodable
我试图使用 Codable 来保存我正在创建的应用程序中的数据,但是当我将 Codable 放入我的结构中时,我不断收到错误消息:
“ReminderGroups”类型不符合“Decodable”协议
和
“ReminderGroups”类型不符合“Encodable”协议
struct ReminderGroups: Codable {
var contentsArray: [ReminderItem] = []
var reminderName: String = ""
var reminderItem: UIImage = #imageLiteral(resourceName: "Folder")
}
Run Code Online (Sandbox Code Playgroud)
Yak*_* M. 10
为了使类或结构符合协议,该类或结构的所有属性都必须符合相同的协议。
UIImage不符合Codable,因此任何具有类型属性的类或结构UIImage也不会符合。您可以使用图像数据或图像的 base64 表示(如String)替换图像。
我会告诉你第一个选项。我想你不想if let每次都写那些s,所以让我们添加两个小extensions 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
将reminderItem类型从更改UIImage为Data。
从现在开始,当您需要访问图像时,请编写类似imageView.image = reminderGroup.reminderItem.image. 而当你需要保存的实例UIImage来reminderItem,写类似reminderGroup.reminderItem = image.data!(哐运营商(惊叹号)是必要的,因为计算的属性data是可选的)。
还要确保ReminderItem符合Codable. 你没有提供那种类型的声明,所以我不能说它是否符合。