<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="">Yes you can get close, but:<div class=""><br class=""></div><div class="">1. Its weird that you can only do this in an extension.</div><div class="">2. Its not quite the same as the proposal the current member-wise initialiser does not make the init arguments optional (the arguments themselves do not have defaults), i.e. with your example `let defaultOriginRect = Rect(size: Size(width: 5.0, height: 5.0))` fails whereas it would work for the proposal (this could also be true if the existing struct memberwise init and the new `memberwise init(..)` where changed to provide init argument defaults).</div><div class="">3. Only ‘really' works for structs, the compiler doesn’t write a member-wise initialiser for classes (just a default initialiser).</div><div class="">4. Still need the compiler to provide both default and member-wise initialisers, whereas this proposal would allow the existing&nbsp;default and member-wise initialisers to be deprecated and just the new member-wise initialiser would remain which would simplify the language and make it clear what was happening (this could also be true if a `memberwise init(..)` where added and existing compiler written inits removed).<br class=""><div class=""><br class="">

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On 5 Jan 2016, at 10:16 AM, Matthew Johnson &lt;<a href="mailto:matthew@anandabits.com" class="">matthew@anandabits.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">struct Rect { var origin: Point = Point(), size: Size = Size() }</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">extension Rect {</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">&nbsp; &nbsp; &nbsp; &nbsp;init(center: Point, size: Size) {<br class=""><blockquote type="cite" class=""></blockquote>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;let originX = center.x - (size.width / 2)<br class=""><blockquote type="cite" class=""></blockquote>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;let originY = center.y - (size.height / 2)<br class=""><blockquote type="cite" class=""></blockquote>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.init(origin: Point(x: originX, y: originY), size: size)<br class=""><blockquote type="cite" class=""></blockquote>&nbsp; &nbsp; &nbsp; &nbsp;}</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">}</div></div></blockquote></div><br class=""></div></body></html>