<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">Actually I’ve done my homework and I can tell you that it will be possible if SE-0095 is accepted.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">Here is how to abuse this:</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; margin: 0px;"><p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro';"><span style="font-variant-ligatures: no-common-ligatures;">protocol</span><span style="font-variant-ligatures: no-common-ligatures;"> A {}</span></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro';"><span style="font-variant-ligatures: no-common-ligatures">protocol</span><span style="font-variant-ligatures: no-common-ligatures;"> B {}</span></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro'; min-height: 14px;"><span style="font-variant-ligatures: no-common-ligatures"></span><br></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro';"><span style="font-variant-ligatures: no-common-ligatures">typealias</span><span style="font-variant-ligatures: no-common-ligatures;"> AB = </span><span style="font-variant-ligatures: no-common-ligatures">protocol</span><span style="font-variant-ligatures: no-common-ligatures;">&lt;</span><span style="font-variant-ligatures: no-common-ligatures;">A</span><span style="font-variant-ligatures: no-common-ligatures;">, </span><span style="font-variant-ligatures: no-common-ligatures;">B</span><span style="font-variant-ligatures: no-common-ligatures;">&gt;</span></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro'; min-height: 14px;"><span style="font-variant-ligatures: no-common-ligatures"></span><br></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro';"><span style="font-variant-ligatures: no-common-ligatures;">protocol</span><span style="font-variant-ligatures: no-common-ligatures;"> C: </span><span style="font-variant-ligatures: no-common-ligatures;">AB</span><span style="font-variant-ligatures: no-common-ligatures;"> {}</span></p></div> <div><br></div>That renamed will be:<div><br></div><div><p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro';"><span style="font-variant-ligatures: no-common-ligatures;">protocol</span><span style="font-variant-ligatures: no-common-ligatures;"> A {}</span></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro';"><span style="font-variant-ligatures: no-common-ligatures">protocol</span><span style="font-variant-ligatures: no-common-ligatures;"> B {}</span></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro'; min-height: 14px;"><span style="font-variant-ligatures: no-common-ligatures"></span><br></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro';"><span style="font-variant-ligatures: no-common-ligatures">typealias</span><span style="font-variant-ligatures: no-common-ligatures;"> AB = </span><span style="font-variant-ligatures: no-common-ligatures">Any</span><span style="font-variant-ligatures: no-common-ligatures;">&lt;</span><span style="font-variant-ligatures: no-common-ligatures;">A</span><span style="font-variant-ligatures: no-common-ligatures;">, </span><span style="font-variant-ligatures: no-common-ligatures;">B</span><span style="font-variant-ligatures: no-common-ligatures;">&gt;</span></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro'; min-height: 14px;"><span style="font-variant-ligatures: no-common-ligatures"></span><br></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro';"><span style="font-variant-ligatures: no-common-ligatures;">protocol</span><span style="font-variant-ligatures: no-common-ligatures;"> C: </span><span style="font-variant-ligatures: no-common-ligatures;">AB</span><span style="font-variant-ligatures: no-common-ligatures;"> {}</span></p><p style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Source Code Pro';"><span style="font-variant-ligatures: no-common-ligatures;"><br></span></p><p style="margin: 0px; line-height: normal;">Do we need this or should we ban this?</p><p style="margin: 0px; line-height: normal;"><br></p><p style="margin: 0px; line-height: normal;">I’m not sure, because we can’t use `Any&lt;…&gt;` directly on a protocol. Using a typealias was a workaround that worked.</p><p style="margin: 0px; line-height: normal;"><br></p><p style="margin: 0px; line-height: normal;">If we keep it that way, it will be fine with my proposal of disallowing redundant types `Any&lt;…&gt;` could create:&nbsp;<a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160516/018280.html">https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160516/018280.html</a></p><p style="margin: 0px; line-height: normal;"><br></p><p style="margin: 0px; line-height: normal;">It looks strange if you can only use typealias for that. If we change that so we could use `Any&lt;…&gt;` directly one would ask why can’t we use `Any&lt;UIView&gt;` on protocols? This is a different story, because we never talked if we can build protocols with type requirement.</p><p style="margin: 0px; line-height: normal;"><br></p> <div id="bloop_sign_1463751857190377984" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 20. Mai 2016 bei 15:02:35, Adrian Zubarev (<a href="mailto:adrian.zubarev@devandartist.com">adrian.zubarev@devandartist.com</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div></div><div>




<title></title>



<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
Can we use `Any&lt;…&gt;` for protocol conformance like
this:&nbsp;</div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
<br></div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
protocol A: Any&lt;class&gt; {} &lt;— this makes a little sense,
but I’d rather write protocol A: class {} instead</div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
<br></div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
protocol B: Any&lt;UIView, SomeProtocol&gt; &nbsp;&lt;— this is
confusing. One could argue we could apply B only on any UIView
subclass which conforms to SomeProtocol, but why can’t we do also
this: protocol C: Any&lt;UIView&gt;&nbsp;</div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
<br></div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
One downside here is that `Any&lt;UIView&gt; == UIView` and should
be banned because its redundant.</div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
<br></div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
We cannot write something like this:</div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
<br></div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
protocol C: UIView&nbsp;</div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
<br></div>
<div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">
Or can we?</div>
<div><br></div>
<div>I’d propose we should ban this in Swift 3.&nbsp;</div>
This implies that `typealias AnyObject = Any&lt;class&gt;` won’t
work anymore on protocols. This is a breaking change.&nbsp;
<div>I’d write a small proposal as another follow up to SE-0095 if
my thoughts are right.
<div><br>
<div id="bloop_sign_1463748571718223104" class="bloop_sign">
<div style="font-family:helvetica,arial;font-size:13px">
--&nbsp;<br>
Adrian Zubarev<br>
Sent with Airmail</div>
</div>
<blockquote type="cite" class="clean_bq">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""></div>
</blockquote>
</div>
</div>


</div></div></span></blockquote></div></body></html>