<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 15, 2016, at 11:46 PM, Andrew Bennett via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">The same goes for tuples. At the moment a tuple is the closest thing to a c style struct. I think c structs are currently imported as tuples.</div></div></div></blockquote><div><br class=""></div><div>Actually structs are imported as structs :-) (eg, import CoreGraphics - you get a CGPoint struct). We ask clang do the in-memory layout, but from a language perspective, they look mostly like normal Swift structs.</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""> If you made it so (A,A) was interchangeable with (B,B) then they'd have to have the same size, and maybe also store type information where they may not otherwise.<br class=""></div></div></div></blockquote><div><br class=""></div>That’s not a requirement for subtyping relations actually.</div><div><br class=""></div><div>If A is a struct conforming to some protocol P, then values of type ‘A’ have a different runtime representation than values of type ‘P’, because the protocol value needs to attach the runtime type to the payload, whereas the struct will not. However, we still do an implicit conversion allowing As to be passed as Ps, we just generate the right code at the point where the conversion takes place.&nbsp;</div><div><br class=""></div><div>Another example is when you have a function () -&gt; A, the conversion to () -&gt; P requires actually generating a thunk to wrap the original function value.</div><div><br class=""></div><div>Subtyping in Swift is different from a pointer cast in C — its semantically producing a new value, so any representational change issues are orthogonal to the language itself. They leak out in the cases that are not implemented (we don’t do tuple conversions currently, and didn’t do function conversions until 2.1) but those will get plugged over time.</div><div><br class=""></div><div>Slava</div><div><br class=""></div><div><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class="">On Tuesday, 16 February 2016, Cao Jiannan via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="">Also:<div class=""><br class=""></div><div class="">union(A,B,C) is subtype of union(A,B,C,D,…)</div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">在 2016年2月16日,14:36,Cao Jiannan &lt;<a class="">frogcjn@163.com</a>&gt; 写道:</div><br class=""><div class=""><div style="word-wrap:break-word" class=""><div class="">Hi all,</div><div class=""><br class=""></div><div class="">I think the best way to solve the either problem is to separate it from generic.&nbsp;</div><div class="">Optional and Either shouldn’t work the same way of generic type.&nbsp;</div><div class="">It’s just a represent of multiple type in one location.</div><div class=""><br class=""></div><div class="">Using an old friend, Union in C.</div><div class="">union {</div><div class=""><span style="white-space:pre-wrap" class="">        </span>case firstType</div><div class=""><span style="white-space:pre-wrap" class="">        </span>case secondType</div><div class="">}</div><div class=""><br class=""></div><div class="">This is the final solution for the sub typing problem of optional.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">A &nbsp;== union(A,A)</div><div class=""><div class="">union(A,B) == union(B,A)</div></div><div class="">B == union(B,B)</div><div class=""><br class=""></div><div class="">B is subtype of union(A,B)</div><div class="">A is&nbsp;subtype&nbsp;of union(A,B)</div><div class=""><br class=""></div><div class=""><div class="">suppose&nbsp;</div><div class="">a is subclass of A</div><div class="">b is subclass of B, then</div></div><div class=""><div class=""><span style="white-space:pre-wrap" class="">        </span>union(a,B) is subtype of union(A,B)</div><div class=""><span style="white-space:pre-wrap" class="">        </span>union(A,b) is&nbsp;subtype&nbsp;of union(A,B)</div></div><div class=""><div class=""><span style="white-space:pre-wrap" class="">        </span>union(a,b) is&nbsp;subtype&nbsp;of union(a,B)</div></div><div class=""><div class=""><span style="white-space:pre-wrap" class="">        </span>union(a,b) is&nbsp;subtype&nbsp;of union(A,b)</div></div><div class=""><br class=""></div><div class="">union can have as many case as possible. e.g., union(A,B,C,D,…)</div><div class=""><br class=""></div><div class="">So the Optional&lt;UITableView&gt; should be union(UITableView, None)</div><div class="">and Optional&lt;MyTableVIew&gt; should be union(MyTableView, None), which is subclass of union(UITableView, None)</div><div class=""><br class=""></div><div class="">This is a final rational solution. I think.</div><div class=""><br class=""></div><div class="">-Jiannan</div><div class=""><br class=""><blockquote type="cite" class=""><div class="">下面是被转发的邮件:</div><br class=""><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px" class=""><span style="font-family:-webkit-system-font,'Helvetica Neue',Helvetica,sans-serif" class=""><b class="">发件人: </b></span><span style="font-family:-webkit-system-font,Helvetica Neue,Helvetica,sans-serif" class="">Cao Jiannan via swift-evolution &lt;<a class="">swift-evolution@swift.org</a>&gt;<br class=""></span></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px" class=""><span style="font-family:-webkit-system-font,'Helvetica Neue',Helvetica,sans-serif" class=""><b class="">主题: </b></span><span style="font-family:-webkit-system-font,Helvetica Neue,Helvetica,sans-serif" class=""><b class="">[swift-evolution]  Swift Generic Subtype Problem</b><br class=""></span></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px" class=""><span style="font-family:-webkit-system-font,'Helvetica Neue',Helvetica,sans-serif" class=""><b class="">日期: </b></span><span style="font-family:-webkit-system-font,Helvetica Neue,Helvetica,sans-serif" class="">2016年2月16日 GMT+8 11:48:18<br class=""></span></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px" class=""><span style="font-family:-webkit-system-font,'Helvetica Neue',Helvetica,sans-serif" class=""><b class="">收件人: </b></span><span style="font-family:-webkit-system-font,Helvetica Neue,Helvetica,sans-serif" class=""><a class="">swift-evolution@swift.org</a><br class=""></span></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px" class=""><span style="font-family:-webkit-system-font,'Helvetica Neue',Helvetica,sans-serif" class=""><b class="">回复-收件人: </b></span><span style="font-family:-webkit-system-font,Helvetica Neue,Helvetica,sans-serif" class="">Cao Jiannan &lt;<a class="">frogcjn@163.com</a>&gt;<br class=""></span></div><br class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><span style="color:rgb(51,51,51);font-family:inherit;font-size:10pt;font-style:inherit" class=""><br class=""></span></div><span style="color:rgb(51,51,51);font-family:inherit;font-size:10pt;font-style:inherit" class="">Hi all,</span><br class=""><div class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><span style="font-family:inherit;color:rgb(51,51,51);font-size:10pt;font-style:inherit" class="">I&nbsp;</span><font color="#333333" face="Helvetica Neue" size="2" style="font-family:'Helvetica Neue'" class="">want to discuss on a&nbsp;</font><span style="color:rgb(51,51,51);font-family:'Helvetica Neue';font-size:small" class="">problem</span>&nbsp; about&nbsp;<span style="font-family:'Helvetica Neue';color:rgb(51,51,51);font-size:small" class="">optional generic&nbsp;sub-typing.</span></div><div class=""><div class=""><br class=""></div><div class=""><div class="">This is my suggesion.</div><div class=""><br class=""></div></div><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="word-wrap:break-word" class=""><div class="">if B is subclass of A</div><div class="">Either&lt;B,B&gt; is subclass of Either&lt;A,A&gt;, Either&lt;A,B&gt;, Either&lt;B,A&gt;</div><div class="">Either&lt;B,A&gt; is subclass of Either&lt;A,A&gt;</div><div class=""><div class="">Either&lt;A,B&gt; is subclass of Either&lt;A,A&gt;</div><div class=""><br class=""></div></div></div></div></div></div><blockquote type="cite" class=""><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""></div><div class=""></div></div></div></div></div></blockquote></div><div class="">Why? Let’s see an example code in a real project:</div><div class=""><br class=""></div><div class=""><div class=""><div style="word-wrap:break-word" class=""><div style="margin:0px 0px 0px 6px;line-height:normal" class=""><br class=""></div><div style="margin:0px 0px 0px 6px;line-height:normal;font-family:'Helvetica Neue'" class=""><span style="color:rgb(51,51,51);font-family:inherit;font-size:10pt;font-style:inherit" class=""><br class=""></span></div><div style="margin:0px 0px 0px 6px;line-height:normal;font-family:'Helvetica Neue'" class=""><span style="color:rgb(51,51,51);font-family:inherit;font-size:10pt;font-style:inherit" class="">Here is a protocol type for some UIViewController,</span></div><div class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><div style="padding:1px 0px 0px;border:none;font-family:Consolas,'Courier New',Courier,mono,serif;vertical-align:baseline;background-color:rgb(249,249,249);width:auto;overflow:visible;color:rgb(51,51,51);margin:0px!important" class=""><div style="margin:0px;padding:0px 0px 0px 45px;border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline" class=""><div style="margin:0px;padding:0px;border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline" class=""></div></div><ol start="1" style="padding:0px;border:none;font-style:inherit;font-family:inherit;vertical-align:baseline;list-style-position:initial;background-color:rgb(255,255,255);color:rgb(92,92,92);margin:0px 0px 1px 45px!important" class=""><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;color:inherit;min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">protocol&nbsp;&nbsp;SegueHandlerType&nbsp;{&nbsp;&nbsp;</span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;background-color:rgb(248,248,248);min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tableView:&nbsp;UITableView!&nbsp;{&nbsp;get&nbsp;}&nbsp;&nbsp;</span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;color:inherit;min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">}&nbsp;&nbsp;</span></li></ol></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;vertical-align:baseline;line-height:1.4737em;color:rgb(51,51,51)" class=""><br class=""></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;vertical-align:baseline;line-height:1.4737em;color:rgb(51,51,51)" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;font-size:10pt;font-family:inherit;vertical-align:baseline" class="">so the UITableViewController can conform to the protocal</span></div><div style="padding:1px 0px 0px;border:none;font-family:Consolas,'Courier New',Courier,mono,serif;vertical-align:baseline;background-color:rgb(249,249,249);width:auto;overflow:visible;color:rgb(51,51,51);margin:0px!important" class=""><div style="margin:0px;padding:0px 0px 0px 45px;border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline" class=""><div style="margin:0px;padding:0px;border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline" class=""></div></div><ol start="1" style="padding:0px;border:none;font-style:inherit;font-family:inherit;vertical-align:baseline;list-style-position:initial;background-color:rgb(255,255,255);color:rgb(92,92,92);margin:0px 0px 1px 45px!important" class=""><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;color:inherit;min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">extension&nbsp;UITableViewController&nbsp;:&nbsp;SegueHandlerType&nbsp;{&nbsp;&nbsp;</span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;background-color:rgb(248,248,248);min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">}&nbsp;&nbsp;</span></li></ol></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;vertical-align:baseline;line-height:1.4737em;color:rgb(51,51,51)" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;font-size:10pt;font-family:inherit;vertical-align:baseline" class=""><br class=""></span></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;vertical-align:baseline;line-height:1.4737em;color:rgb(51,51,51)" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;font-size:10pt;font-family:inherit;vertical-align:baseline" class="">It's great!</span></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;vertical-align:baseline;line-height:1.4737em;color:rgb(51,51,51)" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;font-size:10pt;font-family:inherit;vertical-align:baseline" class="">What if the tableView is a subclass UITableView?</span></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;vertical-align:baseline;line-height:1.4737em;color:rgb(51,51,51)" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;font-size:10pt;font-family:inherit;vertical-align:baseline" class="">like:</span></div><div style="padding:1px 0px 0px;border:none;font-family:Consolas,'Courier New',Courier,mono,serif;vertical-align:baseline;background-color:rgb(249,249,249);width:auto;overflow:visible;color:rgb(51,51,51);margin:0px!important" class=""><div style="margin:0px;padding:0px 0px 0px 45px;border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline" class=""><div style="margin:0px;padding:0px;border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline" class=""></div></div><ol start="1" style="padding:0px;border:none;font-style:inherit;font-family:inherit;vertical-align:baseline;list-style-position:initial;background-color:rgb(255,255,255);color:rgb(92,92,92);margin:0px 0px 1px 45px!important" class=""><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;color:inherit;min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">class MyTableView : UITableView {</span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;color:inherit;min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">}</span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;color:inherit;min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class=""><br class=""></span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;color:inherit;min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">MyTableViewController&nbsp;{&nbsp;&nbsp;</span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;background-color:rgb(248,248,248);min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;color:rgb(100,100,100);background-color:inherit;font-size:9pt!important" class="">@IBOutlet</span><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">&nbsp;var&nbsp;tableView:&nbsp;MyTableView! &nbsp;</span></span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;background-color:rgb(248,248,248);min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">}&nbsp;&nbsp;</span></li></ol></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;vertical-align:baseline;line-height:1.4737em;color:rgb(51,51,51)" class=""><br class=""></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;vertical-align:baseline;line-height:1.4737em;color:rgb(51,51,51)" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;font-size:10pt;font-family:inherit;vertical-align:baseline" class="">Then&nbsp;</span></div><div style="padding:1px 0px 0px;border:none;font-family:Consolas,'Courier New',Courier,mono,serif;vertical-align:baseline;background-color:rgb(249,249,249);width:auto;overflow:visible;color:rgb(51,51,51);margin:0px!important" class=""><div style="margin:0px;padding:0px 0px 0px 45px;border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline" class=""><div style="margin:0px;padding:0px;border:0px;font-style:inherit;font-family:inherit;vertical-align:baseline" class=""></div></div><ol start="1" style="padding:0px;border:none;font-style:inherit;font-family:inherit;vertical-align:baseline;list-style-position:initial;background-color:rgb(255,255,255);color:rgb(92,92,92);margin:0px 0px 1px 45px!important" class=""><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;color:inherit;min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">extension&nbsp;MyTableViewController:SegueHandlerType&nbsp;{&nbsp;&nbsp;</span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;background-color:rgb(248,248,248);min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">&nbsp;&nbsp;</span></li><li style="border-left-width:3px;border-style:none none none solid;border-left-color:rgb(255,255,255);font-style:inherit;font-size:1em;font-family:inherit;vertical-align:baseline;line-height:12pt;list-style:decimal-leading-zero outside;color:inherit;min-height:12pt;white-space:nowrap;margin:0px!important;padding:0px 3px 0px 10px!important" class=""><span style="margin:0px;padding:0px;border:0px;font-style:inherit;vertical-align:baseline;background-color:inherit;font-size:9pt!important" class="">}&nbsp;&nbsp;</span></li></ol></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;line-height:1.4737em" class=""><span style="font-family:Helvetica;font-size:12px" class="">will trigger a compiler error.</span><br style="font-family:Helvetica;font-size:12px" class=""><span style="font-family:Helvetica;font-size:12px" class="">&nbsp;</span><br style="font-family:Helvetica;font-size:12px" class=""><span style="font-family:Helvetica;font-size:12px" class="">So the Optional needs a subclass system.</span><br style="font-family:Helvetica;font-size:12px" class=""><span style="font-family:Helvetica;font-size:12px" class="">Or to say, that the template system needs a subclass system.</span><br style="font-family:Helvetica;font-size:12px" class=""><span style="font-family:Helvetica;font-size:12px" class="">&nbsp;</span><br style="font-family:Helvetica;font-size:12px" class=""><span style="font-family:Helvetica;font-size:12px" class="">Optional&lt;UITableView&gt; should be the super type of Optional&lt;MyTableView&gt;</span><br style="font-family:Helvetica;font-size:12px" class=""><span style="font-family:Helvetica;font-size:12px" class="">Array&lt;UITableView&gt; should be the super type of Array&lt;MyTableView&gt;</span></div></div><div style="margin:0px;padding:0px;border:0px;font-size:16px;font-family:'Myriad Set Pro','Lucida Grande','Helvetica Neue',Helvetica,Arial,Verdana,sans-serif;vertical-align:baseline;line-height:1.4737em;color:rgb(51,51,51)" class=""><br class=""></div><div style="margin:0px;padding:0px;border:0px;vertical-align:baseline;line-height:1.4737em" class=""><font color="#333333" face="Myriad Set Pro, Lucida Grande, Helvetica Neue, Helvetica, Arial, Verdana, sans-serif" size="3" class=""><a href="https://forums.developer.apple.com/message/101646#101646" target="_blank" class="">https://forums.developer.apple.com/message/101646#101646</a></font></div></div></div></div></div></div><blockquote type="cite" class=""><div class=""><div style="word-wrap:break-word" class=""><div class=""><div class=""><div style="word-wrap:break-word" class=""></div></div></div></div></div></blockquote></div><div class=""><br class=""></div><div class=""><div class=""><br class=""></div></div><div class=""><br class=""></div><div class="">Thanks!</div><div class=""><br class=""></div><div class="">Jiannan, Cao</div><div class=""><br class=""></div><div class=""><br class=""></div></div></div></div></div></div></div></div></div></div><br class=""></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div></div></blockquote></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>