My structure does not conform to protocol 'Decodable' / 'Encodable'
up vote
-2
down vote
favorite
I was trying to use Codable to save my data from the app I am creating but when I put Codable into my structure I keep getting the error:
Type 'ReminderGroups' does not conform to protocol 'Decodable'
and
Type 'ReminderGroups' does not conform to protocol 'Encodable'
struct ReminderGroups: Codable
var contentsArray: [ReminderItem] =
var reminderName: String = ""
var reminderItem: UIImage = #imageLiteral(resourceName: "Folder")
swift structure codable decodable
add a comment |
up vote
-2
down vote
favorite
I was trying to use Codable to save my data from the app I am creating but when I put Codable into my structure I keep getting the error:
Type 'ReminderGroups' does not conform to protocol 'Decodable'
and
Type 'ReminderGroups' does not conform to protocol 'Encodable'
struct ReminderGroups: Codable
var contentsArray: [ReminderItem] =
var reminderName: String = ""
var reminderItem: UIImage = #imageLiteral(resourceName: "Folder")
swift structure codable decodable
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 at 18:52
add a comment |
up vote
-2
down vote
favorite
up vote
-2
down vote
favorite
I was trying to use Codable to save my data from the app I am creating but when I put Codable into my structure I keep getting the error:
Type 'ReminderGroups' does not conform to protocol 'Decodable'
and
Type 'ReminderGroups' does not conform to protocol 'Encodable'
struct ReminderGroups: Codable
var contentsArray: [ReminderItem] =
var reminderName: String = ""
var reminderItem: UIImage = #imageLiteral(resourceName: "Folder")
swift structure codable decodable
I was trying to use Codable to save my data from the app I am creating but when I put Codable into my structure I keep getting the error:
Type 'ReminderGroups' does not conform to protocol 'Decodable'
and
Type 'ReminderGroups' does not conform to protocol 'Encodable'
struct ReminderGroups: Codable
var contentsArray: [ReminderItem] =
var reminderName: String = ""
var reminderItem: UIImage = #imageLiteral(resourceName: "Folder")
swift structure codable decodable
swift structure codable decodable
edited Nov 11 at 19:25
rmaddy
237k27308374
237k27308374
asked Nov 11 at 18:49
JohnnyTee
61
61
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 at 18:52
add a comment |
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 at 18:52
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 at 18:51
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 at 18:52
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 at 18:52
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
In order for a class or a struct to conform to a protocol, all properties of that class or struct must conform to the same protocol.
UIImage does not conform to Codable, so any class or struct that has properties of type UIImage won’t conform as well. You can replace the image with image data or the image’s base64 representation (as String).
I’ll show you the first option. I suppose you don’t want to write those if lets every time, so let’s add two little extensions to UIImage and Data that will speed up future conversions.
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’s type from UIImage to Data.
From now on, when you need to access the image, write something like imageView.image = reminderGroup.reminderItem.image. And when you need to save an instance of UIImage to reminderItem, write something like reminderGroup.reminderItem = image.data! (the bang operator (exclamation mark) is needed because the computed property data is optional).
Also make sure ReminderItem does conform to Codable. You didn’t provide the declaration of that type, so I can’t say whether it conforms of not.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
In order for a class or a struct to conform to a protocol, all properties of that class or struct must conform to the same protocol.
UIImage does not conform to Codable, so any class or struct that has properties of type UIImage won’t conform as well. You can replace the image with image data or the image’s base64 representation (as String).
I’ll show you the first option. I suppose you don’t want to write those if lets every time, so let’s add two little extensions to UIImage and Data that will speed up future conversions.
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’s type from UIImage to Data.
From now on, when you need to access the image, write something like imageView.image = reminderGroup.reminderItem.image. And when you need to save an instance of UIImage to reminderItem, write something like reminderGroup.reminderItem = image.data! (the bang operator (exclamation mark) is needed because the computed property data is optional).
Also make sure ReminderItem does conform to Codable. You didn’t provide the declaration of that type, so I can’t say whether it conforms of not.
add a comment |
up vote
0
down vote
accepted
In order for a class or a struct to conform to a protocol, all properties of that class or struct must conform to the same protocol.
UIImage does not conform to Codable, so any class or struct that has properties of type UIImage won’t conform as well. You can replace the image with image data or the image’s base64 representation (as String).
I’ll show you the first option. I suppose you don’t want to write those if lets every time, so let’s add two little extensions to UIImage and Data that will speed up future conversions.
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’s type from UIImage to Data.
From now on, when you need to access the image, write something like imageView.image = reminderGroup.reminderItem.image. And when you need to save an instance of UIImage to reminderItem, write something like reminderGroup.reminderItem = image.data! (the bang operator (exclamation mark) is needed because the computed property data is optional).
Also make sure ReminderItem does conform to Codable. You didn’t provide the declaration of that type, so I can’t say whether it conforms of not.
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
In order for a class or a struct to conform to a protocol, all properties of that class or struct must conform to the same protocol.
UIImage does not conform to Codable, so any class or struct that has properties of type UIImage won’t conform as well. You can replace the image with image data or the image’s base64 representation (as String).
I’ll show you the first option. I suppose you don’t want to write those if lets every time, so let’s add two little extensions to UIImage and Data that will speed up future conversions.
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’s type from UIImage to Data.
From now on, when you need to access the image, write something like imageView.image = reminderGroup.reminderItem.image. And when you need to save an instance of UIImage to reminderItem, write something like reminderGroup.reminderItem = image.data! (the bang operator (exclamation mark) is needed because the computed property data is optional).
Also make sure ReminderItem does conform to Codable. You didn’t provide the declaration of that type, so I can’t say whether it conforms of not.
In order for a class or a struct to conform to a protocol, all properties of that class or struct must conform to the same protocol.
UIImage does not conform to Codable, so any class or struct that has properties of type UIImage won’t conform as well. You can replace the image with image data or the image’s base64 representation (as String).
I’ll show you the first option. I suppose you don’t want to write those if lets every time, so let’s add two little extensions to UIImage and Data that will speed up future conversions.
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’s type from UIImage to Data.
From now on, when you need to access the image, write something like imageView.image = reminderGroup.reminderItem.image. And when you need to save an instance of UIImage to reminderItem, write something like reminderGroup.reminderItem = image.data! (the bang operator (exclamation mark) is needed because the computed property data is optional).
Also make sure ReminderItem does conform to Codable. You didn’t provide the declaration of that type, so I can’t say whether it conforms of not.
edited Nov 11 at 19:11
answered Nov 11 at 19:00
Yakov M.
185
185
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53252019%2fmy-structure-does-not-conform-to-protocol-decodable-encodable%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 at 18:52