<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><br></div><div>On Jan 12, 2017, at 16:50, Oscar Swanros 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>

<title></title>


<div name="messageBodySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;">Hello everyone. This is my first contribution to Swift Evolution. In summary:&nbsp;<span style="font-family: inherit; font-size: 13px; white-space: pre-wrap;">It would be nice if the type casting operator accepted expressions on its right side.</span>
<div><span style="font-family: inherit; font-size: 13px; white-space: pre-wrap;"><br></span></div>
<div>
<pre class="preContent" style="outline: none; font-family: inherit; font-size: 13px; margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word;">So, basically, the type casting operator only accepts types and can't process expressions on its right side.

Having a class A, and a subclass of A, B:

class A {}
class B: A {}

And a function that returns the passed type:

func type&lt;T: A&gt;(t: T.Type) -&gt; T.Type {
    return t
}

The following scenario works:

let b = B()
let a = (b as A)

However the following scenario doesn't:

let b = B()
let a = (b as type(A))
</pre>
<pre class="preContent" style="outline: none; font-family: inherit; font-size: 13px; margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word;"><br>
</pre>
<pre class="preContent" style="outline: none; font-family: inherit; font-size: 13px; margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word;">Having the “as” accept expressions on its right side would be really useful and could enable some truly great generic algorithm implementations.</pre></div></div></div></blockquote><br><div>+1 for the functionality, but I think it's part of the larger issue of "functions which can be evaluated at compile-time", which, IIRC, is presently considered out of scope (can't recall if that's just for phase 1 or Swift 4 altogether). I might be wrong, though. I'm sure someone who knows more than I do will be along shortly with a better answer.</div><div><br></div><div>- Dave Sweeris&nbsp;</div></body></html>