<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi Slava:</div><div class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div class="">class B : A {}</div><div class=""><br class=""></div><div class="">class C : P {</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>func f() -&gt; B {} // compile error</div><div class="">}</div><div class=""><br class=""></div><div class="">Once witness matching supports variance, your example will work.</div><div class=""><br class=""></div><div class="">But a better way would be to use an associated type:</div><div class=""><br class=""></div><div class="">protocol SequeHandlerType {</div><div class="">&nbsp; &nbsp; associatedtype View : UITableView</div><div class="">&nbsp; &nbsp;&nbsp;var tableView: View! { get }</div><div class="">}</div></div></blockquote><div class=""><br class=""></div><br class=""><div class="">Yes. This makes sense to me.&nbsp;</div><div class="">Associate type is a hard toy for me.&nbsp;</div><div class="">Sometimes I can figure out, sometimes I cannot. Sometimes I figure out but compiler say no.</div><div class=""><br class=""></div><div class="">The problem is not really with the optional sub typing relation, but looks like.</div><div class="">AssociatedType can solve the problem like this:</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">class</span> A {}</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code'; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">class</span> B :&nbsp;<span style="font-variant-ligatures: no-common-ligatures; color: #3495af" class="">A</span> {}</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code'; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code'; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code'; color: rgb(4, 51, 255);" class="">protocol<span style="font-variant-ligatures: no-common-ligatures; color: #000000" class="">&nbsp;HandlerType{</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">var</span> a:&nbsp;<span style="font-variant-ligatures: no-common-ligatures; color: #3495af" class="">A</span> {&nbsp;<span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">get&nbsp;</span>}</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class="">}</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code'; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">class</span>&nbsp;Handler: <font color="#3495af" class="">HandlerType</font>{</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">var</span> b = <span style="font-variant-ligatures: no-common-ligatures; color: #3495af" class="">B</span>() //Compiler Error, though b is subtype of A</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class="">}</div></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class=""><div style="font-family: Helvetica; font-size: 12px;" class="">should be:</div></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class=""><div style="margin: 0px; line-height: normal; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">protocol</span> HandlerType{</div><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">typealias</span> Target :A</div><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">var</span> a:&nbsp;<span style="font-variant-ligatures: no-common-ligatures; color: #3495af" class="">Target</span> {&nbsp;<span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">get&nbsp;</span>}</div><div style="margin: 0px; line-height: normal;" class="">}</div><div style="margin: 0px; line-height: normal; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">class</span> Handler: <span style="font-variant-ligatures: no-common-ligatures; color: #3495af" class="">HandlerType</span> {</div><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #0433ff" class="">var</span> a = <span style="font-variant-ligatures: no-common-ligatures; color: #3495af" class="">B</span>()</div><div style="margin: 0px; line-height: normal;" class="">}</div><div style="margin: 0px; line-height: normal;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><div style="font-family: Helvetica; font-size: 12px;" class="">This is the solution to my question.</div><div style="font-family: Helvetica; font-size: 12px;" class="">Thanks.</div><div style="font-family: Helvetica; font-size: 12px;" class=""><br class=""></div><div style="font-family: Helvetica; font-size: 12px;" class="">- Jiannan</div><div style="font-family: Helvetica; font-size: 12px;" class=""><br class=""></div><div class=""><br class=""></div></div></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class=""><div style="margin: 0px; line-height: normal;" class=""><br class=""></div></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: 'Fira Code';" class=""><br class=""></div></body></html>