Write to Nested Dictionary (Swift 4)












2














I have declared a dictionary in Swift as so: var dict = [String: [String: [String]]]().



What I am trying to do now is to write to the nested dictionary. I have used both codes below, however, none of them work as the initial key does not exist:



dict["Test"]?["One"] = ["Failed"]
dict["Test"]!["One"] = ["Failed"]


What I am trying to do is to create a key for ["One"], much like how you can create a key for a normal dictionary using dict[key].










share|improve this question
























  • did you solve it?
    – Gustavo Vollbrecht
    Nov 13 at 16:09










  • yes i did! thank you, but I don't know why I can't accept your answer. I don't see the green checkmark.
    – M.I
    Nov 13 at 20:45
















2














I have declared a dictionary in Swift as so: var dict = [String: [String: [String]]]().



What I am trying to do now is to write to the nested dictionary. I have used both codes below, however, none of them work as the initial key does not exist:



dict["Test"]?["One"] = ["Failed"]
dict["Test"]!["One"] = ["Failed"]


What I am trying to do is to create a key for ["One"], much like how you can create a key for a normal dictionary using dict[key].










share|improve this question
























  • did you solve it?
    – Gustavo Vollbrecht
    Nov 13 at 16:09










  • yes i did! thank you, but I don't know why I can't accept your answer. I don't see the green checkmark.
    – M.I
    Nov 13 at 20:45














2












2








2







I have declared a dictionary in Swift as so: var dict = [String: [String: [String]]]().



What I am trying to do now is to write to the nested dictionary. I have used both codes below, however, none of them work as the initial key does not exist:



dict["Test"]?["One"] = ["Failed"]
dict["Test"]!["One"] = ["Failed"]


What I am trying to do is to create a key for ["One"], much like how you can create a key for a normal dictionary using dict[key].










share|improve this question















I have declared a dictionary in Swift as so: var dict = [String: [String: [String]]]().



What I am trying to do now is to write to the nested dictionary. I have used both codes below, however, none of them work as the initial key does not exist:



dict["Test"]?["One"] = ["Failed"]
dict["Test"]!["One"] = ["Failed"]


What I am trying to do is to create a key for ["One"], much like how you can create a key for a normal dictionary using dict[key].







swift dictionary collections






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 11 at 22:58









Hamish

45k7103158




45k7103158










asked Nov 11 at 22:55









M.I

13512




13512












  • did you solve it?
    – Gustavo Vollbrecht
    Nov 13 at 16:09










  • yes i did! thank you, but I don't know why I can't accept your answer. I don't see the green checkmark.
    – M.I
    Nov 13 at 20:45


















  • did you solve it?
    – Gustavo Vollbrecht
    Nov 13 at 16:09










  • yes i did! thank you, but I don't know why I can't accept your answer. I don't see the green checkmark.
    – M.I
    Nov 13 at 20:45
















did you solve it?
– Gustavo Vollbrecht
Nov 13 at 16:09




did you solve it?
– Gustavo Vollbrecht
Nov 13 at 16:09












yes i did! thank you, but I don't know why I can't accept your answer. I don't see the green checkmark.
– M.I
Nov 13 at 20:45




yes i did! thank you, but I don't know why I can't accept your answer. I don't see the green checkmark.
– M.I
Nov 13 at 20:45












2 Answers
2






active

oldest

votes


















2














You need to instantiate every inner dictionary.



var dict = [String : [String : [String]]]()

dict["Test"] = [String : [String]]()

dict["Test"]?["One"] = ["Worked"]

print(dict)


Make sure to avoid force unwrapping.






share|improve this answer





























    1














    dict is empty. There is no value for the "Test" key.



    One option is to provide a default:



    dict["Test", default: [:]]["One"] = ["A", "B"]


    You can take this one step further:



    dict["Test2", default: [:]]["Two", default: ].append("Hello")


    That last line will work for any combination of the keys "Test2" and "Two" existing or not before that is used.






    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%2f53254064%2fwrite-to-nested-dictionary-swift-4%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      2














      You need to instantiate every inner dictionary.



      var dict = [String : [String : [String]]]()

      dict["Test"] = [String : [String]]()

      dict["Test"]?["One"] = ["Worked"]

      print(dict)


      Make sure to avoid force unwrapping.






      share|improve this answer


























        2














        You need to instantiate every inner dictionary.



        var dict = [String : [String : [String]]]()

        dict["Test"] = [String : [String]]()

        dict["Test"]?["One"] = ["Worked"]

        print(dict)


        Make sure to avoid force unwrapping.






        share|improve this answer
























          2












          2








          2






          You need to instantiate every inner dictionary.



          var dict = [String : [String : [String]]]()

          dict["Test"] = [String : [String]]()

          dict["Test"]?["One"] = ["Worked"]

          print(dict)


          Make sure to avoid force unwrapping.






          share|improve this answer












          You need to instantiate every inner dictionary.



          var dict = [String : [String : [String]]]()

          dict["Test"] = [String : [String]]()

          dict["Test"]?["One"] = ["Worked"]

          print(dict)


          Make sure to avoid force unwrapping.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 11 at 23:09









          Gustavo Vollbrecht

          6531515




          6531515

























              1














              dict is empty. There is no value for the "Test" key.



              One option is to provide a default:



              dict["Test", default: [:]]["One"] = ["A", "B"]


              You can take this one step further:



              dict["Test2", default: [:]]["Two", default: ].append("Hello")


              That last line will work for any combination of the keys "Test2" and "Two" existing or not before that is used.






              share|improve this answer


























                1














                dict is empty. There is no value for the "Test" key.



                One option is to provide a default:



                dict["Test", default: [:]]["One"] = ["A", "B"]


                You can take this one step further:



                dict["Test2", default: [:]]["Two", default: ].append("Hello")


                That last line will work for any combination of the keys "Test2" and "Two" existing or not before that is used.






                share|improve this answer
























                  1












                  1








                  1






                  dict is empty. There is no value for the "Test" key.



                  One option is to provide a default:



                  dict["Test", default: [:]]["One"] = ["A", "B"]


                  You can take this one step further:



                  dict["Test2", default: [:]]["Two", default: ].append("Hello")


                  That last line will work for any combination of the keys "Test2" and "Two" existing or not before that is used.






                  share|improve this answer












                  dict is empty. There is no value for the "Test" key.



                  One option is to provide a default:



                  dict["Test", default: [:]]["One"] = ["A", "B"]


                  You can take this one step further:



                  dict["Test2", default: [:]]["Two", default: ].append("Hello")


                  That last line will work for any combination of the keys "Test2" and "Two" existing or not before that is used.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 11 at 23:26









                  rmaddy

                  238k27309375




                  238k27309375






























                      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.





                      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.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254064%2fwrite-to-nested-dictionary-swift-4%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

                      Full-time equivalent

                      Bicuculline

                      さくらももこ