<div dir="ltr">On Thu, Feb 4, 2016 at 4:28 PM, Paul Ossenbruggen via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><b>Draft Proposal feedback welcome.</b></div><div><b><br></b></div><div><b>## Introduction</b></div><div><br></div>Currently to make a optional from a value the type name must be repeated:<div><br></div><div><span style="white-space:pre-wrap">        </span>let x = “Some Value”</div><div><span style="white-space:pre-wrap">        </span>let y : String? = x</div><div><br></div><div>This takes away some of the advantage of type inference because the very next line I must specify the type.</div></div></blockquote><div><br></div><div>Any use case examples? I&#39;ve been trying to figure out why is this needs fixing (I don&#39;t even see it as a problem).</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br></div><div><b>## Proposal</b></div><div><br></div><div>I propose the following syntax:</div><div><br></div><div><span style="white-space:pre-wrap">        </span>let y? = x</div><div><br></div><div>This binds a new optional y which wraps the same value of x. It follows the same conventions as <b>var</b> and <b>let</b> that currently exist in the language. </div><div><br></div><div><div>The advantages: this is easier to read, more compact, and lets type inference determine the type. </div></div><div><br></div><div><b>If let</b> and other conditionals would not support this syntax and optionals of optionals is not supported. So let x?? = y would not result in an optional optional. Also if y was an optional it would not let you upgrade that.</div><div><br></div><div><b>## Detailed Design</b></div><div><br></div><div>The grammar: </div><div><br></div><div><div><span style="white-space:pre-wrap">        </span>let optionalValue? = value</div></div><div><br></div><div><div>This would not make sense in the <b>if let, (guard</b><b> let)</b><b> </b>context because <b>if let</b> unwraps the value, so this would be an error. </div></div><div><br></div><div><div>This should not conflict with pattern matching as that requires the <b>case</b> keyword. </div></div><div><br></div><div><div>Wrapping optional in an optional is an error. </div></div><div><br></div><div><b>## Impact on existing code</b></div><div><br></div><div>The current syntax will continue to exist so it will have no impact on existing code. </div><div><br></div><div><b>## Alternatives Considered</b></div><div><br></div><div>None. </div><div><br></div><div><br></div></div><br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div></div>