<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. 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=""> <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. 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 <<a href="mailto:adrian.zubarev@devandartist.com" class="">adrian.zubarev@devandartist.com</a>> 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"> </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"> </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"> </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"> </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 // => 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="">-- <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? It does not feel like an improvement. <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 </div><div class="">3. Allow interpolation </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"<?xml version="1.0"?>
"<catalog>
" <book id="bk101" empty="">
" <author><font color="#FF2600" class="">\(</font><font color="#0433FF" class="">author</font><font color="#FF2600" class="">)</font></author>
" </book>
"</catalog></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 = """<?xml version="1.0"?>
"<catalog>
" <book id="bk101" empty="">
" <author><font color="#FF2600" class="">\(</font><font color="#0433FF" class="">author</font><font color="#FF2600" class="">)</font></author>
" </book>
"</catalog></code></pre><div class="">In the first example the multiline literal is started with M". In the second example it starts with three double quotes """. I really have no preference. 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"> </span><font face="Menlo" class="">empty=""</font>. You can have interpolation, i.e. <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>. </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 <<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>> 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 = "<?xml version=\"1.0\"?>
"<catalog>
" <book id=\"bk101\" empty=\"\">
" <author>\(author)</author>
" <title>XML Developer's Guide</title>
" <genre>Computer</genre>
" <price>44.95</price>
" <publish_date>2000-10-01</publish_date>
" <description>An in-depth look at creating applications with XML.</description>
" </book>
"</catalog>
""
</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 = "<?xml version=\"1.0\"?>\
"<catalog>\ // If you need you can comment here
" <book id=\"bk101\" empty=\"\">\
" <author>\(author)</author>\
" <title>XML Developer's Guide</title>\
" <genre>Computer</genre>\
" <price>44.95</price>\
" <publish_date>2000-10-01</publish_date>\
" <description>An in-depth look at creating applications with XML.</description>\
" </book>\
"</catalog>\
""
</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;"> </span><strong class="" style="-webkit-margin-before: 0px;">continuation quotes</strong><span class="Apple-converted-space"> </span>combined with<span class="Apple-converted-space"> </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;">-- <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>