IntValue ?? 0 == -1? “-”: “+” What does this mean?












3















I am importing price information and adding + or -.



I put the title code in print () and it works but I do not know what it means.



print("(IntValue ?? 0 == -1 ? "-" : "+")")


Please explain it briefly to me.










share|improve this question





























    3















    I am importing price information and adding + or -.



    I put the title code in print () and it works but I do not know what it means.



    print("(IntValue ?? 0 == -1 ? "-" : "+")")


    Please explain it briefly to me.










    share|improve this question



























      3












      3








      3


      0






      I am importing price information and adding + or -.



      I put the title code in print () and it works but I do not know what it means.



      print("(IntValue ?? 0 == -1 ? "-" : "+")")


      Please explain it briefly to me.










      share|improve this question
















      I am importing price information and adding + or -.



      I put the title code in print () and it works but I do not know what it means.



      print("(IntValue ?? 0 == -1 ? "-" : "+")")


      Please explain it briefly to me.







      swift ternary-operator






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 23 '18 at 4:40







      Enkha

















      asked Nov 23 '18 at 2:36









      EnkhaEnkha

      17411




      17411
























          2 Answers
          2






          active

          oldest

          votes


















          7














          The variable IntValue is an optional, which means its either an Integer or nil. IntValue ?? 0 means that if IntValue exists, then use the value of IntValue. If IntValue is nil, then use the value 0. Next, compare that value with -1. If that value is equal to -1, then print -. If that value does not equal -1, then print +.



          Here's equivalent code with only if statements:



          var defaultInt = 0
          if IntValue != nil {
          defaultInt = IntValue! // force unwrap the optional value
          }
          if defaultInt == -1 {
          print("-")
          }
          else {
          print("+")
          }





          share|improve this answer


























          • I think it should be if IntValue != nil as you only want to use the value of IntValue if it’s not nil; otherwise use 0

            – War10ck
            Nov 23 '18 at 3:55











          • War10ck is right. That line should be if IntValue != nil

            – Duncan C
            Nov 23 '18 at 11:07











          • Oops, you guys are right. Fixed it in the edit.

            – Kevin Bai
            Nov 23 '18 at 11:14



















          10














          Kevin's answer is very good.



          Some background that helps explain further:



          The code you posted uses two rather cryptic operators together.



          ?? is the nil-coalescing operator.



          It takes an optional value, which can contain nil, and provides a new value to use when it does contain nil.





          Edit:



          (Note that you can skip the nil-coalescing operator and use IntValue == -1 instead. That works because only a non-nil value of -1 is equal to -1. An optional that contains nil is not equal to -1.



          You could rewrite the line as



          print("(IntValue == -1 ? "-" : "+")")


          And get the same result.)





          The next tricky bit is the "ternary operator". This comes from C. It's quite cryptic, but also quite useful.



          It takes the form boolean ? value_for_true : value_for_false



          Where boolean is a boolean expression that evaluates to true or false.



          If boolean is true, then the result of the whole ternary expression is the value_for_true sub-expression.



          If boolean is false the result of the whole ternary expression is the value_for_false sub-expression.



          IntValue ?? 0 == -1 is the boolean part of your ternary expression. It evaluates as true if IntValue is -1. It evaluates as false if IntValue contains any other value, or if it contains nil.



          (Note that variables and let constants should start with lower-case letters, so IntValue should be intValue.)






          share|improve this answer


























          • I voted for you. Additional explanation Thank you.

            – Enkha
            Nov 23 '18 at 4:41











          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%2f53440022%2fintvalue-0-1-what-does-this-mean%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









          7














          The variable IntValue is an optional, which means its either an Integer or nil. IntValue ?? 0 means that if IntValue exists, then use the value of IntValue. If IntValue is nil, then use the value 0. Next, compare that value with -1. If that value is equal to -1, then print -. If that value does not equal -1, then print +.



          Here's equivalent code with only if statements:



          var defaultInt = 0
          if IntValue != nil {
          defaultInt = IntValue! // force unwrap the optional value
          }
          if defaultInt == -1 {
          print("-")
          }
          else {
          print("+")
          }





          share|improve this answer


























          • I think it should be if IntValue != nil as you only want to use the value of IntValue if it’s not nil; otherwise use 0

            – War10ck
            Nov 23 '18 at 3:55











          • War10ck is right. That line should be if IntValue != nil

            – Duncan C
            Nov 23 '18 at 11:07











          • Oops, you guys are right. Fixed it in the edit.

            – Kevin Bai
            Nov 23 '18 at 11:14
















          7














          The variable IntValue is an optional, which means its either an Integer or nil. IntValue ?? 0 means that if IntValue exists, then use the value of IntValue. If IntValue is nil, then use the value 0. Next, compare that value with -1. If that value is equal to -1, then print -. If that value does not equal -1, then print +.



          Here's equivalent code with only if statements:



          var defaultInt = 0
          if IntValue != nil {
          defaultInt = IntValue! // force unwrap the optional value
          }
          if defaultInt == -1 {
          print("-")
          }
          else {
          print("+")
          }





          share|improve this answer


























          • I think it should be if IntValue != nil as you only want to use the value of IntValue if it’s not nil; otherwise use 0

            – War10ck
            Nov 23 '18 at 3:55











          • War10ck is right. That line should be if IntValue != nil

            – Duncan C
            Nov 23 '18 at 11:07











          • Oops, you guys are right. Fixed it in the edit.

            – Kevin Bai
            Nov 23 '18 at 11:14














          7












          7








          7







          The variable IntValue is an optional, which means its either an Integer or nil. IntValue ?? 0 means that if IntValue exists, then use the value of IntValue. If IntValue is nil, then use the value 0. Next, compare that value with -1. If that value is equal to -1, then print -. If that value does not equal -1, then print +.



          Here's equivalent code with only if statements:



          var defaultInt = 0
          if IntValue != nil {
          defaultInt = IntValue! // force unwrap the optional value
          }
          if defaultInt == -1 {
          print("-")
          }
          else {
          print("+")
          }





          share|improve this answer















          The variable IntValue is an optional, which means its either an Integer or nil. IntValue ?? 0 means that if IntValue exists, then use the value of IntValue. If IntValue is nil, then use the value 0. Next, compare that value with -1. If that value is equal to -1, then print -. If that value does not equal -1, then print +.



          Here's equivalent code with only if statements:



          var defaultInt = 0
          if IntValue != nil {
          defaultInt = IntValue! // force unwrap the optional value
          }
          if defaultInt == -1 {
          print("-")
          }
          else {
          print("+")
          }






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 23 '18 at 11:19

























          answered Nov 23 '18 at 2:51









          Kevin BaiKevin Bai

          18817




          18817













          • I think it should be if IntValue != nil as you only want to use the value of IntValue if it’s not nil; otherwise use 0

            – War10ck
            Nov 23 '18 at 3:55











          • War10ck is right. That line should be if IntValue != nil

            – Duncan C
            Nov 23 '18 at 11:07











          • Oops, you guys are right. Fixed it in the edit.

            – Kevin Bai
            Nov 23 '18 at 11:14



















          • I think it should be if IntValue != nil as you only want to use the value of IntValue if it’s not nil; otherwise use 0

            – War10ck
            Nov 23 '18 at 3:55











          • War10ck is right. That line should be if IntValue != nil

            – Duncan C
            Nov 23 '18 at 11:07











          • Oops, you guys are right. Fixed it in the edit.

            – Kevin Bai
            Nov 23 '18 at 11:14

















          I think it should be if IntValue != nil as you only want to use the value of IntValue if it’s not nil; otherwise use 0

          – War10ck
          Nov 23 '18 at 3:55





          I think it should be if IntValue != nil as you only want to use the value of IntValue if it’s not nil; otherwise use 0

          – War10ck
          Nov 23 '18 at 3:55













          War10ck is right. That line should be if IntValue != nil

          – Duncan C
          Nov 23 '18 at 11:07





          War10ck is right. That line should be if IntValue != nil

          – Duncan C
          Nov 23 '18 at 11:07













          Oops, you guys are right. Fixed it in the edit.

          – Kevin Bai
          Nov 23 '18 at 11:14





          Oops, you guys are right. Fixed it in the edit.

          – Kevin Bai
          Nov 23 '18 at 11:14













          10














          Kevin's answer is very good.



          Some background that helps explain further:



          The code you posted uses two rather cryptic operators together.



          ?? is the nil-coalescing operator.



          It takes an optional value, which can contain nil, and provides a new value to use when it does contain nil.





          Edit:



          (Note that you can skip the nil-coalescing operator and use IntValue == -1 instead. That works because only a non-nil value of -1 is equal to -1. An optional that contains nil is not equal to -1.



          You could rewrite the line as



          print("(IntValue == -1 ? "-" : "+")")


          And get the same result.)





          The next tricky bit is the "ternary operator". This comes from C. It's quite cryptic, but also quite useful.



          It takes the form boolean ? value_for_true : value_for_false



          Where boolean is a boolean expression that evaluates to true or false.



          If boolean is true, then the result of the whole ternary expression is the value_for_true sub-expression.



          If boolean is false the result of the whole ternary expression is the value_for_false sub-expression.



          IntValue ?? 0 == -1 is the boolean part of your ternary expression. It evaluates as true if IntValue is -1. It evaluates as false if IntValue contains any other value, or if it contains nil.



          (Note that variables and let constants should start with lower-case letters, so IntValue should be intValue.)






          share|improve this answer


























          • I voted for you. Additional explanation Thank you.

            – Enkha
            Nov 23 '18 at 4:41
















          10














          Kevin's answer is very good.



          Some background that helps explain further:



          The code you posted uses two rather cryptic operators together.



          ?? is the nil-coalescing operator.



          It takes an optional value, which can contain nil, and provides a new value to use when it does contain nil.





          Edit:



          (Note that you can skip the nil-coalescing operator and use IntValue == -1 instead. That works because only a non-nil value of -1 is equal to -1. An optional that contains nil is not equal to -1.



          You could rewrite the line as



          print("(IntValue == -1 ? "-" : "+")")


          And get the same result.)





          The next tricky bit is the "ternary operator". This comes from C. It's quite cryptic, but also quite useful.



          It takes the form boolean ? value_for_true : value_for_false



          Where boolean is a boolean expression that evaluates to true or false.



          If boolean is true, then the result of the whole ternary expression is the value_for_true sub-expression.



          If boolean is false the result of the whole ternary expression is the value_for_false sub-expression.



          IntValue ?? 0 == -1 is the boolean part of your ternary expression. It evaluates as true if IntValue is -1. It evaluates as false if IntValue contains any other value, or if it contains nil.



          (Note that variables and let constants should start with lower-case letters, so IntValue should be intValue.)






          share|improve this answer


























          • I voted for you. Additional explanation Thank you.

            – Enkha
            Nov 23 '18 at 4:41














          10












          10








          10







          Kevin's answer is very good.



          Some background that helps explain further:



          The code you posted uses two rather cryptic operators together.



          ?? is the nil-coalescing operator.



          It takes an optional value, which can contain nil, and provides a new value to use when it does contain nil.





          Edit:



          (Note that you can skip the nil-coalescing operator and use IntValue == -1 instead. That works because only a non-nil value of -1 is equal to -1. An optional that contains nil is not equal to -1.



          You could rewrite the line as



          print("(IntValue == -1 ? "-" : "+")")


          And get the same result.)





          The next tricky bit is the "ternary operator". This comes from C. It's quite cryptic, but also quite useful.



          It takes the form boolean ? value_for_true : value_for_false



          Where boolean is a boolean expression that evaluates to true or false.



          If boolean is true, then the result of the whole ternary expression is the value_for_true sub-expression.



          If boolean is false the result of the whole ternary expression is the value_for_false sub-expression.



          IntValue ?? 0 == -1 is the boolean part of your ternary expression. It evaluates as true if IntValue is -1. It evaluates as false if IntValue contains any other value, or if it contains nil.



          (Note that variables and let constants should start with lower-case letters, so IntValue should be intValue.)






          share|improve this answer















          Kevin's answer is very good.



          Some background that helps explain further:



          The code you posted uses two rather cryptic operators together.



          ?? is the nil-coalescing operator.



          It takes an optional value, which can contain nil, and provides a new value to use when it does contain nil.





          Edit:



          (Note that you can skip the nil-coalescing operator and use IntValue == -1 instead. That works because only a non-nil value of -1 is equal to -1. An optional that contains nil is not equal to -1.



          You could rewrite the line as



          print("(IntValue == -1 ? "-" : "+")")


          And get the same result.)





          The next tricky bit is the "ternary operator". This comes from C. It's quite cryptic, but also quite useful.



          It takes the form boolean ? value_for_true : value_for_false



          Where boolean is a boolean expression that evaluates to true or false.



          If boolean is true, then the result of the whole ternary expression is the value_for_true sub-expression.



          If boolean is false the result of the whole ternary expression is the value_for_false sub-expression.



          IntValue ?? 0 == -1 is the boolean part of your ternary expression. It evaluates as true if IntValue is -1. It evaluates as false if IntValue contains any other value, or if it contains nil.



          (Note that variables and let constants should start with lower-case letters, so IntValue should be intValue.)







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 23 '18 at 3:13

























          answered Nov 23 '18 at 3:07









          Duncan CDuncan C

          93.7k13114200




          93.7k13114200













          • I voted for you. Additional explanation Thank you.

            – Enkha
            Nov 23 '18 at 4:41



















          • I voted for you. Additional explanation Thank you.

            – Enkha
            Nov 23 '18 at 4:41

















          I voted for you. Additional explanation Thank you.

          – Enkha
          Nov 23 '18 at 4:41





          I voted for you. Additional explanation Thank you.

          – Enkha
          Nov 23 '18 at 4:41


















          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%2f53440022%2fintvalue-0-1-what-does-this-mean%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

          Paul Cézanne

          UIScrollView CustomStickyHeader Resize height generates problems when scroll is too fast

          Angular material date-picker (MatDatepicker) auto completes the date on focus out