My structure does not conform to protocol 'Decodable' / 'Encodable'










-2















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")










share|improve this question
























  • 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















-2















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")










share|improve this question
























  • 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













-2












-2








-2








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")










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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

















  • 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












1 Answer
1






active

oldest

votes


















0














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.






share|improve this answer
























    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
    );



    );













    draft saved

    draft discarded


















    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









    0














    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.






    share|improve this answer





























      0














      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.






      share|improve this answer



























        0












        0








        0







        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.






        share|improve this answer















        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.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 11 '18 at 19:11

























        answered Nov 11 '18 at 19:00









        Yakov M.Yakov M.

        4417




        4417



























            draft saved

            draft discarded
















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

            Edmonton

            Crossroads (UK TV series)