<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I think we should focus on taking care of 99% of the cases. &nbsp;If you have a very long string then you use the good old fashioned string literal concatenation:<div class=""><br class=""></div><div class="">Let veryLongString2 = "word word word"</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>+ "word word word"</div><div class="">&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>+ "word word word"</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">By the way, the multi-line string should allow \n\n, or as many as you may want to throw in there. &nbsp;I don't see a problem with that.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Apr 3, 2017, at 10:23 AM, Adrian Zubarev &lt;<a href="mailto:adrian.zubarev@devandartist.com" class="">adrian.zubarev@devandartist.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><p style="margin: 15px 0px; -webkit-margin-before: 0px;" class="">At quick glance I disagree with (4). If your current string would contain something like<span class="Apple-converted-space">&nbsp;</span><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;" class="">"\n\n"</code><span class="Apple-converted-space">&nbsp;</span>would you really use another empty line with a single unescaped quote? If you’re not, you’ll end up adding a single<span class="Apple-converted-space">&nbsp;</span><code style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(234, 234, 234); margin: 0px 2px; padding: 0px 5px; word-break: normal; word-wrap: normal;" class="">\n</code>, but that on the other than would be strange if you add it at the end of the line.</p><p style="margin: 15px 0px;" class="">Multi-lined strings should not be abused for adding new lines to the string itself, however I’m fine with allowing single quotes without escaping them.<span class="Apple-converted-space">&nbsp;</span></p><p style="margin: 15px 0px;" class="">If we’d really go that path then I still could not format some really long hardcoded text for code readability in a multi lined string, just because of the fact that it will alter my original string by automatically adding new line characters.</p><pre style="margin: 15px 0px; font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 4px 8px; word-break: normal; word-wrap: normal;" class=""><code class="swift" style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 0px; margin: 0px; padding: 0px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;">let veryLongString1 = "word word word … word word word"

let veryLongString2 = """word word word  
    word word word
    …
    word word word
    word word word"""
     
// Logically that string should be the same, however during the  
// automatic new lines we'll get this

veryLongString1 == veryLongString2 // =&gt; false
</code></pre><p style="margin: 15px 0px;" class="">What has the multi lined string solved here? Nothing.</p><div style="margin: 15px 0px;" class=""><br class="webkit-block-placeholder"></div></div><div class="bloop_original_html" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><div id="bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;" class=""><br class=""></div><br class=""><div id="bloop_sign_1491228363065474048" class="bloop_sign"><div style="font-family: helvetica, arial; font-size: 13px;" class="">--&nbsp;<br class="">Adrian Zubarev<br class="">Sent with Airmail</div></div><br class=""><p class="airmail_on" style="margin: 15px 0px;">Am 3. April 2017 um 16:00:53, Ricardo Parada (<a href="mailto:rparada@mac.com" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;" class="">rparada@mac.com</a>) schrieb:</p><blockquote type="cite" class="clean_bq" style="margin: 15px 0px;"><span style="margin-top: 0px; margin-bottom: 0px;" class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""></div><div class="">What is the purpose of that backslash? &nbsp;It does not feel like an improvement.&nbsp;<div class=""><br class=""></div><div class=""><div class="">I think we should focus on:</div><div class=""><br class=""></div><div class="">1. Looking pretty</div><div class="">2. Allow unescaped quote, double quote as well single/double apostrophe characters&nbsp;</div><div class="">3. Allow interpolation&nbsp;</div><div class="">4. No need to add the \n character for each line</div><div class="">5. It should have a continuation character</div><div class="">6. Keep it simple</div><div class=""><br class=""></div><div class="">Something like this:</div><div class=""><br class=""></div><div class=""><pre class="" style="margin: 0px 0px 16px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: transparent; color: inherit; border: 0px; margin: 0px; padding: 0px; word-break: normal; word-wrap: normal; box-sizing: border-box; display: inline; line-height: inherit;">let xml = M"&lt;?xml version="1.0"?&gt;
           "&lt;catalog&gt;
           " &lt;book id="bk101" empty=""&gt;
           "     &lt;author&gt;<font color="#FF2600" class="">\(</font><font color="#0433FF" class="">author</font><font color="#FF2600" class="">)</font>&lt;/author&gt;
           " &lt;/book&gt;
           "&lt;/catalog&gt;</code></pre><div class="">Or maybe this:</div><div class=""><br class=""></div><div class=""><pre class="" style="margin: 0px 0px 16px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(247, 247, 247); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 16px; word-break: normal; word-wrap: normal; box-sizing: border-box; line-height: 1.45;"><code class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: transparent; color: inherit; border: 0px; margin: 0px; padding: 0px; word-break: normal; word-wrap: normal; box-sizing: border-box; display: inline; line-height: inherit;">let xml = """&lt;?xml version="1.0"?&gt;
            "&lt;catalog&gt;
            " &lt;book id="bk101" empty=""&gt;
            "     &lt;author&gt;<font color="#FF2600" class="">\(</font><font color="#0433FF" class="">author</font><font color="#FF2600" class="">)</font>&lt;/author&gt;
            " &lt;/book&gt;
            "&lt;/catalog&gt;</code></pre><div class="">In the first example the multiline literal is started with M". &nbsp;In the second example it starts with three double quotes """. &nbsp;I really have no preference. &nbsp;In both examples there is no need to have a \ or \n at the end of the line.</div><div class=""><br class=""></div><div class="">You can have quote characters in the string, including double quotes as shown by<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">empty=""</font>. &nbsp;You can have interpolation, i.e.&nbsp;<font color="#FF2600" class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;">\(</font><font color="#0433FF" class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;">author</font><font color="#FF2600" class="" style="font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;">)</font>.&nbsp;</div><div class=""><br class=""></div><div class="">You have a continuation character which helps as a visual guide and as a marker for the beginning of each line.</div></div><div class=""><br class=""></div><div class="">The multi string literal ends when there are no more continuation characters.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div></div><div class=""><blockquote type="cite" class="" style="margin: 15px 0px;"><div class="" style="margin-top: 0px;">On Apr 3, 2017, at 3:01 AM, Adrian Zubarev via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: inherit; text-decoration: none;">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="" style="margin-bottom: 0px;"><div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><p class="" style="margin: 15px 0px; -webkit-margin-before: 0px;">Hello Swift community,</p><p class="" style="margin: 15px 0px;">on Github there is a PR for this proposal, but I couldn’t find any up to date thread, so I’m going to start by replying to the last message I found, without the last content.</p><p class="" style="margin: 15px 0px;">I really like where this proposal is going, and my personal preference are *continuation quotes*. However the proposed solution is still not perfect enough for me, because it still lacks of precise control about the trailing space characters in each line of a multi-line string.</p><p class="" style="margin: 15px 0px;">Proposed version looks like this:</p><pre class="" style="margin: 15px 0px; font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 4px 8px; word-break: normal; word-wrap: normal;"><code class="swift" style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 0px; margin: 0px; padding: 0px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;">let xml = "&lt;?xml version=\"1.0\"?&gt;
    "&lt;catalog&gt;
    "    &lt;book id=\"bk101\" empty=\"\"&gt;
    "        &lt;author&gt;\(author)&lt;/author&gt;
    "        &lt;title&gt;XML Developer's Guide&lt;/title&gt;
    "        &lt;genre&gt;Computer&lt;/genre&gt;
    "        &lt;price&gt;44.95&lt;/price&gt;
    "        &lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;
    "        &lt;description&gt;An in-depth look at creating applications with XML.&lt;/description&gt;
    "    &lt;/book&gt;
    "&lt;/catalog&gt;
    ""
</code></pre><p class="" style="margin: 15px 0px;">I would like to pitch an enhancement to fix the last tiny part by adding the escaping character ‘' to the end of each line from 1 to (n - 1) of the n-lined string. This is similar to what Javascript allows us to do, except that we also have precise control about the leading space character through ’"’.</p><p class="" style="margin: 15px 0px;">The proposed version will become this:</p><pre class="" style="margin: 15px 0px; font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 4px 8px; word-break: normal; word-wrap: normal;"><code class="swift" style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 0px; margin: 0px; padding: 0px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;">let xml = "&lt;?xml version=\"1.0\"?&gt;\   
    "&lt;catalog&gt;\ // If you need you can comment here
    "    &lt;book id=\"bk101\" empty=\"\"&gt;\
    "        &lt;author&gt;\(author)&lt;/author&gt;\
    "        &lt;title&gt;XML Developer's Guide&lt;/title&gt;\
    "        &lt;genre&gt;Computer&lt;/genre&gt;\
    "        &lt;price&gt;44.95&lt;/price&gt;\
    "        &lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;\
    "        &lt;description&gt;An in-depth look at creating applications with XML.&lt;/description&gt;\
    "    &lt;/book&gt;\
    "&lt;/catalog&gt;\
    ""
</code></pre><p class="" style="margin: 15px 0px;">Here is another example:</p><pre class="" style="margin: 15px 0px; font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 4px 8px; word-break: normal; word-wrap: normal;"><code class="swift" style="font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); color: inherit; border: 0px; margin: 0px; padding: 0px; word-break: normal; word-wrap: normal; -webkit-margin-before: 0px;">let multilineString: String = "123__456__\ // indicates there is another part of the string on the next line
                              "__789_____\ // aways starts with `"` and ends with either `\` or `"`
                              "_____0_" // precise control about pre- and post-space-characters

let otherString = "\(someInstance)\ /* only comments are allowed in between */ "text \(someOtherInstance) text"
</code></pre><p class="" style="margin: 15px 0px;">This is simply<span class="Apple-converted-space" style="-webkit-margin-before: 0px;">&nbsp;</span><strong class="" style="-webkit-margin-before: 0px;">continuation quotes</strong><span class="Apple-converted-space">&nbsp;</span>combined with<span class="Apple-converted-space">&nbsp;</span><strong class="">backslash concatenation</strong>.</p><div class="" style="margin: 15px 0px;"><br class="webkit-block-placeholder" style="-webkit-margin-before: 0px;"></div></div><div class="bloop_original_html" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><div class="bloop_markdown"><div class="" style="-webkit-margin-before: 0px; margin: 15px 0px;"><br class="webkit-block-placeholder" style="-webkit-margin-before: 0px;"></div></div><div class="bloop_original_html"><div id="bloop_customfont" class="" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;"><br class=""></div><br class=""><div id="bloop_sign_1491202043170386944" class="bloop_sign"><div class="" style="font-family: helvetica, arial; font-size: 13px;">--&nbsp;<br class="">Adrian Zubarev<br class="">Sent with Airmail</div></div></div><div class="bloop_markdown"><div class="" style="-webkit-margin-before: 0px; margin: 15px 0px;"><br class="webkit-block-placeholder" style="-webkit-margin-before: 0px;"></div></div></div><div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><div class="" style="-webkit-margin-before: 0px; margin: 15px 0px;"><br class="webkit-block-placeholder" style="-webkit-margin-before: 0px;"></div></div><span class="" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254); float: none; display: inline !important;">_______________________________________________</span><br class="" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><span class="" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254); float: none; display: inline !important;">swift-evolution mailing list</span><br class="" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><a href="mailto:swift-evolution@swift.org" class="" style="color: rgb(65, 131, 196); background-color: rgb(254, 254, 254); text-decoration: none; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">swift-evolution@swift.org</a><br class="" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="" style="color: rgb(65, 131, 196); background-color: rgb(254, 254, 254); text-decoration: none; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"></div></blockquote></div><br class=""></div></div></div></span></blockquote></div><div class="bloop_markdown" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254);"><br class="Apple-interchange-newline"></div></div></blockquote></div><br class=""></div></body></html>