My structure does not conform to protocol 'Decodable' / 'Encodable'
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 |
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 '18 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 '18 at 18:52
add a comment |
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 '18 at 19:25
rmaddy
242k27316380
242k27316380
asked Nov 11 '18 at 18:49
JohnnyTeeJohnnyTee
61
61
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 '18 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 '18 at 18:52
add a comment |
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 '18 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 '18 at 18:52
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 '18 at 18:51
possible duplicate of stackoverflow.com/questions/48568373/…
– Arie Pinto
Nov 11 '18 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 '18 at 18:52
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 '18 at 18:52
add a comment |
1 Answer
1
active
oldest
votes
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 let
s every time, so let’s add two little extension
s 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 |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
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
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
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 let
s every time, so let’s add two little extension
s 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 |
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 let
s every time, so let’s add two little extension
s 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 |
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 let
s every time, so let’s add two little extension
s 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 let
s every time, so let’s add two little extension
s 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 '18 at 19:11
answered Nov 11 '18 at 19:00
Yakov M.Yakov M.
4417
4417
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.
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 '18 at 18:51
Possible duplicate of Codable class does not conform to protocol Decodable
– Arie Pinto
Nov 11 '18 at 18:52