<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="">Hi,<div class=""><br class=""></div><div class="">When using Generics with Protocols I get a compilation error depending on whether or not conformance to a protocol is defined in the same file or not.</div><div class=""><br class=""></div><div class=""><b class="">Error</b>:&nbsp;</div><div class=""><font face="Menlo" color="#5c0700" class="">Type 'Car.ItemID' (aka 'CarID') does not conform to protocol 'P2'</font></div><div class=""><br class=""></div><div class=""><div class="">I have 2 swift files:</div><div class="">-&nbsp;<font color="#0433ff" class="">CarID.swift</font></div><div class="">-&nbsp;<font color="#0433ff" class="">CreateCars.swift</font></div></div><div class=""><br class=""></div><div class=""><b class="">Observations:</b></div><div class="">- I get the error when&nbsp;<span style="color: rgb(186, 45, 162); font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255);" class="">extension</span><span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255);" class=""> </span><span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255); color: rgb(79, 129, 135);" class="">CarID</span><span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255);" class=""> : </span><span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255); color: rgb(79, 129, 135);" class="">P2</span><span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255);" class=""> {} </span>is defined in <font color="#0433ff" class="">CarID.swift</font></div><div class="">-<font color="#0433ff" class=""> </font>I don’t get the error when<font color="#0433ff" class="">&nbsp;</font><span style="color: rgb(186, 45, 162); font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255);" class="">extension</span><span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255);" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255); color: rgb(79, 129, 135);" class="">CarID</span><span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255);" class="">&nbsp;:&nbsp;</span><span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255); color: rgb(79, 129, 135);" class="">P2</span><font class=""><span style="font-family: Menlo; background-color: rgb(255, 255, 255); font-size: 11px;" class="">&nbsp;{} </span>is defined in&nbsp;<font color="#0433ff" class="">CreateCars.swift</font> as shown in the comments below.</font></div><div class=""><font class=""><br class=""></font></div><div class=""><font class=""><b class="">Tested On:</b></font></div><div class=""><font class="">- <font color="#0433ff" class="">Xcode&nbsp;9.0 (9A235) - GM</font></font></div><div class=""><font class="">- <font color="#0433ff" class="">Command Line project / iOS project</font></font></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><span style="color: rgb(4, 51, 255);" class=""><b class="">CarID.swift:</b></span></div><div class=""><span style="color: rgb(4, 51, 255);" class=""><b class=""><br class=""></b></span></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class=""><span style="color: #ba2da2" class="">import</span> Foundation</div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(186, 45, 162); background-color: rgb(255, 255, 255);" class="">protocol<span style="color: #000000" class=""> P1 &nbsp; {</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(186, 45, 162); background-color: rgb(255, 255, 255);" class=""><span style="color: #000000" class="">&nbsp; &nbsp; </span>associatedtype<span style="color: #000000" class=""> ItemID</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class="">}</div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class=""><span style="color: #ba2da2" class="">class</span> Car : <span style="color: #4f8187" class="">P1</span> {</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class="">&nbsp; &nbsp; <span style="color: #ba2da2" class="">typealias</span> ItemID = <span style="color: #4f8187" class="">CarID</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class="">}</div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);" class="">//extension CarID : P2 {} //Error wouldn't occur if this line is uncommented and the line in CarID.swift is commented out</div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(186, 45, 162); background-color: rgb(255, 255, 255);" class="">protocol<span style="color: #000000" class=""> P2 {}</span></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class=""><span style="color: #ba2da2" class="">class</span> CreateItems&lt;Something : <span style="color: #4f8187" class="">P1</span>&gt;</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135); background-color: rgb(255, 255, 255);" class=""><span style="color: #ba2da2" class="">where</span><span style="color: #000000" class=""> </span>Something<span style="color: #000000" class="">.</span><span style="color: #703daa" class="">ItemID</span><span style="color: #000000" class=""> : </span>P2<span style="color: #000000" class=""> {}</span></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);" class=""><span style="color: #ba2da2" class="">class</span><span style="color: #000000" class=""> CreateCars : </span><span style="text-decoration: underline ; color: #4f8187" class="">C</span><span style="color: #4f8187" class="">reateItems</span><span style="color: #000000" class="">&lt;</span><span style="color: #4f8187" class="">Car</span><span style="color: #000000" class="">&gt; {} </span>//Error: Type 'Car.ItemID' (aka 'CarID') does not conform to protocol 'P2'</div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135); background-color: rgb(255, 255, 255);" class=""><span style="color: #ba2da2" class="">extension</span><span style="color: #000000" class=""> </span>CreateCars<span style="color: #000000" class=""> {}</span></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><span style="color: rgb(4, 51, 255);" class=""><b class=""><br class=""></b></span></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><span style="color: rgb(4, 51, 255);" class=""><b class="">CreateCars.swift:</b></span></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="color: #ba2da2" class="">import</span> Foundation</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="color: #ba2da2" class="">class</span> CarID {}</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0);" class=""><span style="color: #ba2da2" class="">extension</span><span style="color: #000000" class=""> </span><span style="color: #4f8187" class="">CarID</span><span style="color: #000000" class=""> : </span><span style="color: #4f8187" class="">P2</span><span style="color: #000000" class=""> {} </span>//If this line is moved to CreateCars.swift the error vanishes away</div></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class="">Thanks and regards,</div><div style="margin: 0px; line-height: normal; background-color: rgb(255, 255, 255); min-height: 14px;" class="">Muthu</div></body></html>