<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="gmail-"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word">In the specific case of initializers, my opinion here is the opposite in fact — I think assigning to ‘self’ should be permitted in all convenience initializers, even initializers defined directly classes, without the protocol extension trick. Also, we should lower this more efficiently than we do today, without creating a self ‘carcass’ that is allocated and immediately freed, to be replaced by the ‘real’ self.<div><br></div></div></blockquote><div><br></div></span><div>I totally agree. And I think that is the least impact way on the language specification.</div><div><br></div></div></div></div>
</blockquote></div><br></div><div class="gmail_extra">Oops, It seems I have to take back my words.</div><div class="gmail_extra">With my &quot;factory initializer&quot; example:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><span style="font-family:monospace,monospace">  let dog = Dog(type: &quot;cat&quot;)</span><br></div><div class="gmail_extra"><div class="gmail_extra"><font face="monospace, monospace">  type(of: dog) == Cat.self</font></div><div class="gmail_extra"><br></div><div class="gmail_extra">results &quot;true&quot;.</div></div></div>