<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=""><div class="">I disagree. The “if let” and “if var” are part of the pattern matching syntax that is fairly unified throughout the language, especially with the reversal for removing “if var” from Swift. Also, does “bind” also replace the “let” and “var” usage in case statements? And how do you handle this case?</div><div class=""><br class=""></div><div class=""><font face="Menlo" class="">let items: [Int]? = [1, 5, 4]<br class=""><br class="">if var items = items {<br class=""> items.sortInPlace()<br class="">}<br class=""></font><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">-David</div><div class=""><br class=""></div><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 1, 2016, at 11:18 AM, Erica Sadun via swift-evolution <<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=us-ascii" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Joe says "<span style="font-family: Palatino-Roman;" class="">If you all are serious about this, I think you should start a new thread about it." </span><div class="">I think it's worth a serious discussion just so it can be evaluated and either adopted or discarded</div><div class="">and dropped forever. Here goes.</div><div class=""><br class=""></div><div class="">INTRO</div><div class=""><br class=""><div class="">The <font face="Menlo" class="">if let x = x {...}</font> and <font face="Menlo" class="">guard let x = x else {...}</font> constructs do something with <font face="Menlo" class="">let</font> (and <font face="Menlo" class="">var</font>) that's </div><div class="">fundamentally different from <font face="Menlo" class="">let</font> (and <font face="Menlo" class="">var</font>) elsewhere in the language. The same keywords are used to conditionally unwrap</div><div class="">and bind an item, not just shadow that item's current value.</div><div class=""><br class=""></div><div class="">Introducing a new <font face="Menlo" class="">bind</font> keyword to indicate unwrapping and binding would disambiguate these uses.</div><div class=""><br class=""></div><div class="">DETAIL DESIGN:</div><div class=""><br class=""></div><div class="">Jacob Bandes-Storch offers two common use-cases. I prefer his "if bind foo" to my original "if bind foo = foo":</div><div class=""><br class=""></div><div class=""><div class=""><font face="Menlo" class=""> if bind foo {</font></div><div class=""><font face="Menlo" class=""> // foo is non-optional in here</font></div><div class=""><font face="Menlo" class=""> }</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class=""> somethingAsync { [weak self] in</font></div><div class=""><font face="Menlo" class=""> guard bind self else { return }</font></div><div class=""><font face="Menlo" class=""> // ...</font></div><div class=""><font face="Menlo" class=""> }</font></div></div><div class=""><br class=""></div></div><div class="">JBS's approach offers my original "bind" keyword to unwrap and shadow bind, but also provides a way to </div><div class="">strongly bind a weak reference to self, which (presumably) would allow self semantics in the remaining</div><div class="">lifetime of that scope.</div><div class=""><br class=""></div><div class="">ALTERNATIVE PROPOSALS:</div><div class=""><br class=""></div><div class="">Tino Heth proposes a second use-case one with different semantics. This case, it seems to make an</div><div class="">alias rather than using binding for shadowing:</div><div class=""><br class=""></div><div class=""><font face="Menlo" class="">bind x = a.property.with.a.long.path<br class="">print x // 42<br class="">print(a.property.with.a.long.path == 42) => true</font></div><div class=""><span style="font-family: Palatino-Roman;" class=""><br class=""></span></div><div class=""><span style="font-family: Palatino-Roman;" class="">presumably this means:</span></div><div class=""><span style="font-family: Palatino-Roman;" class=""><br class=""></span></div><div class=""><font face="Menlo" class="">x += 1</font></div><div class=""><font face="Menlo" class="">print(a.property.with.a.long.path) // 43</font></div><div class=""><font face="Palatino-Roman" class=""><br class=""></font></div><div class=""><font face="Palatino-Roman" class="">DISCUSSION</font></div><div class=""><font face="Palatino-Roman" class=""><br class=""></font></div><div class=""><font face="Palatino-Roman" class="">I'm throwing these both out there. I have nothing to really say about Tino's but I do think my and Jacob's </font></div><div class=""><font face="Palatino-Roman" class="">proposal has the advantages of:</font></div><div class=""><font face="Palatino-Roman" class=""><br class=""></font></div><div class=""><font face="Palatino-Roman" class="">* Simplifying an mildly complex and potentially misleading statement </font></div><div class=""><font face="Palatino-Roman" class="">* Creating a deliberate and controlled rather than accidental shadowing style</font></div><div class=""><font face="Palatino-Roman" class=""><br class=""></font></div><div class=""><font face="Palatino-Roman" class="">Have at it.</font></div><div class=""><font face="Palatino-Roman" class=""><br class=""></font></div><div class=""><font face="Palatino-Roman" class="">-- Erica</font></div><div class=""><font face="Palatino-Roman" class=""><br class=""></font></div><div class=""><font face="Palatino-Roman" class=""><br class=""></font></div></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>