Write to Nested Dictionary (Swift 4)











up vote
2
down vote

favorite












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















up vote
2
down vote

favorite












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













up vote
2
down vote

favorite









up vote
2
down vote

favorite











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

44.6k7101156




44.6k7101156










asked Nov 11 at 22:55









M.I

12911




12911












  • 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

















up vote
2
down vote



accepted










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




























    up vote
    1
    down vote













    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








      up vote
      2
      down vote



      accepted










      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

























        up vote
        2
        down vote



        accepted










        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























          up vote
          2
          down vote



          accepted







          up vote
          2
          down vote



          accepted






          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
























              up vote
              1
              down vote













              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

























                up vote
                1
                down vote













                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























                  up vote
                  1
                  down vote










                  up vote
                  1
                  down vote









                  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

                  237k27309375




                  237k27309375






























                      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

                      The Sandy Post

                      Danny Elfman

                      Pages that link to "Head v. Amoskeag Manufacturing Co."