<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>You can also do something like that is ur code today:</div><div id="AppleMailSignature"><br></div><div id="AppleMailSignature"><div><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">extension&nbsp;Optional&nbsp;{</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp;&nbsp;func&nbsp;unwrap&lt;T&gt; (_&nbsp;h:&nbsp;T&nbsp;-&gt; ()) {</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;switch&nbsp;self&nbsp;{</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;case&nbsp;.Some(let&nbsp;w):</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;let&nbsp;t = w&nbsp;as?&nbsp;T&nbsp;{ h(t) }</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;break</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;default:</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;break;</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp; &nbsp; &nbsp; }</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp; }</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">}</span></p></div><div><span style="background-color: rgba(255, 255, 255, 0);"><br></span></div><div><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">s1.unwrap&nbsp;{ (str:String)&nbsp;in</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp;&nbsp;print("NOPE") &nbsp;// nothing happens</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">}</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">s2.unwrap&nbsp;{ (str:String)&nbsp;in</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">&nbsp; &nbsp;&nbsp;print(":)") &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// prints</span></p><p style="margin: 0px; line-height: normal;"><span style="background-color: rgba(255, 255, 255, 0);">}</span></p></div><div><br></div><br><div>Regards</div>(From<span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.294118);">&nbsp;mobile)</span></div><div><br>On Jun 23, 2016, at 6:25 PM, James Campbell via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small;color:#000000">So if the function I run inside of the map has a return value of Void will that still compile ?</div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">







<p><b><font color="#cc0000">___________________________________</font></b></p><p><b>James⎥Head of Trolls</b></p><p><b><font color="#cc0000"><a href="mailto:james@supmenow.com" target="_blank">james@supmenow.com</a>⎥<a href="http://supmenow.com" target="_blank">supmenow.com</a></font></b></p><p><b><font size="2">Sup</font></b></p><p><b><font size="2">Runway East
</font></b></p><p><b><font size="2">10 Finsbury Square</font></b></p><p><b><font size="2">London</font></b></p><p><b><font size="2">
EC2A 1AF&nbsp;</font></b></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On 23 June 2016 at 17:22, Jordan Rose <span dir="ltr">&lt;<a href="mailto:jordan_rose@apple.com" target="_blank">jordan_rose@apple.com</a>&gt;</span> wrote:<br><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>I think we’d still just recommend using ‘map’ for this. The reason Collection.map and Collection.forEach are different is because we don’t promise eager and in-order evaluation for Collection.map. But Optional only executes the closure one or zero times, so there’s no ambiguity.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Jordan</div></font></span><div><div class="h5"><div><br></div><br><div><blockquote type="cite"><div>On Jun 23, 2016, at 09:15, James Campbell via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">So I have a real-life situation in an application, which does what you mention:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">This code is for a camera app, on a `didSet` it removes a device if set from the capture session, and if there is a new one set it adds it to the capture session.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">The add and remove methods indeed don't take optionals.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">So this is the code before:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><p><span>var</span><span> audioDevice: </span><span>AVCaptureDeviceInput</span><span>? = </span><span>nil</span><span> {</span></p><div><span>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><br></div><p><span>&nbsp; &nbsp; &nbsp; &nbsp; </span><span>willSet</span><span> {</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if let&nbsp;</span>audioDevice = audioDevice {</p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span>captureSession?.removeInput(</span>audioDevice)</p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; }</span></p><div><span>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><br></div><p><span>&nbsp; &nbsp; &nbsp; &nbsp; </span><span>didSet</span><span> {</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;</span>audioDevice = audioDevice {</p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span>captureSession?.addInput(</span>audioDevice)</p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; }</span></p><p><span>&nbsp; &nbsp; }</span></p></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">and after:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><p><span>var</span><span> audioDevice: </span><span>AVCaptureDeviceInput</span><span>? = </span><span>nil</span><span> {</span></p><div><span>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><br></div><p><span>&nbsp; &nbsp; &nbsp; &nbsp; </span><span>willSet</span><span> {</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; audioDevice.unwrap {</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>self</span><span>.captureSession?.removeInput($0)</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; }</span></p><div><span>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><br></div><p><span>&nbsp; &nbsp; &nbsp; &nbsp; </span><span>didSet</span><span> {</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; audioDevice.unwrap {</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>self</span><span>.captureSession?.addInput($0)</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></p><p><span>&nbsp; &nbsp; &nbsp; &nbsp; }</span></p><p><span>&nbsp; &nbsp; }</span></p><p><span><br></span></p><p><span>The last two saved me a lot of typing in these cases and I feel like it is more clear what is going on due to the `unwrap` method being clear in it's intent and the lack of `</span>audioDevice` being repeated multiple times.</p></div></div><div class="gmail_extra"><br clear="all"><div><div data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><p><b><font color="#cc0000">___________________________________</font></b></p><p><b>James⎥Head of Trolls</b></p><p><b><font color="#cc0000"><a href="mailto:james@supmenow.com" target="_blank">james@supmenow.com</a>⎥<a href="http://supmenow.com/" target="_blank">supmenow.com</a></font></b></p><p><b><font size="2">Sup</font></b></p><p><b><font size="2">Runway East
</font></b></p><p><b><font size="2">10 Finsbury Square</font></b></p><p><b><font size="2">London</font></b></p><p><b><font size="2">
EC2A 1AF&nbsp;</font></b></p></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On 23 June 2016 at 17:11, Sean Heber <span dir="ltr">&lt;<a href="mailto:sean@fifthace.com" target="_blank">sean@fifthace.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I’m a bit tore on this myself. I see the appeal, but let’s say we had such a function. If you wanted to use it with an named parameter it’d look like this:<br>
<br>
myReallyLongOptionalName.unwrap { string in<br>
&nbsp; doSomethingWith(string)<br>
}<br>
<br>
And that is actually *more* characters than the current approach:<br>
<span><br>
if let string = myReallyLongOptionalName {<br>
&nbsp; doSomethingWith(string)<br>
}<br>
<br>
</span>However it’d be a big win especially when you can skip $0 and the braces entirely such as:<br>
<br>
myReallyLongOptionalName.unwrap(doSomethingWith)<br>
<br>
Of course if we were dealing with methods, you could write this like:<br>
<br>
myReallyLongOptionalName?.doSomething()<br>
<br>
And that is probably hard to beat.<br>
<br>
So I think the problem really only presents itself when you have an optional that you need to unwrap and use as a parameter to something that does not take an optional.<br>
<br>
I don’t have a solution - just trying to clarify the situation. :)<br>
<br>
l8r<br>
<span><font color="#888888">Sean<br>
</font></span><div><div><br>
<br>
&gt; On Jun 23, 2016, at 10:36 AM, James Campbell via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; I was wondering if people would be open to adding an unwrap method to the Optional type,&nbsp; I already have a method like this which shortens code for me.<br>
&gt;<br>
&gt; So this:<br>
&gt;<br>
&gt; let myReallyLongOptionalName: String? = "Hey"<br>
&gt;<br>
&gt; if let string = myReallyLongOptionalName {<br>
&gt;&nbsp; &nbsp;doSomethingWith(string)<br>
&gt; }<br>
&gt;<br>
&gt; Could become"<br>
&gt;<br>
&gt; let myReallyLongOptionalName: String? = "Hey"<br>
&gt;<br>
&gt; myReallyLongOptionalName.unwrap {<br>
&gt;&nbsp; &nbsp;doSomethingWith($0)<br>
&gt; }<br>
&gt;<br>
&gt; The block would only be fired if myReallyLongOptionalName has a value.<br>
&gt;<br>
&gt; ___________________________________<br>
&gt;<br>
&gt; James⎥Head of Trolls<br>
&gt;<br>
&gt; <a href="mailto:james@supmenow.com" target="_blank">james@supmenow.com</a>⎥<a href="http://supmenow.com/" rel="noreferrer" target="_blank">supmenow.com</a><br>
&gt;<br>
&gt; Sup<br>
&gt;<br>
&gt; Runway East
&gt;<br>
&gt;<br>
&gt; 10 Finsbury Square<br>
&gt;<br>
&gt; London<br>
&gt;<br>
&gt; &gt; EC2A 1AF<br>
&gt;<br>
</div></div><div><div>&gt; _______________________________________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
&gt; <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>
</div></div></blockquote></div><br></div>
_______________________________________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div></blockquote></div><br></div></div></div></blockquote></div><br></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></body></html>