<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 Jan 4, 2016, at 5:48 PM, Howard Lovatt &lt;<a href="mailto:howard.lovatt@gmail.com" class="">howard.lovatt@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div 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></div></blockquote><div><br class=""></div><div>This is the way the current implicit initializer works. &nbsp;It is not synthesized if you define any initializers in the body of the type. &nbsp;There are good reasons it works this way and the current proposal does not change those rules.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><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></div></blockquote><div><br class=""></div><div>The implicit memberwise initializer currently in the language does not provide defaults for parameters. &nbsp;This proposal changes that behavior and provides defaults if the the member is a `var` and has an initial value. &nbsp;</div><div><br class=""></div><div>Unfortunately I was not able to find a solution to allow synthesized parameters for `let` members to have default values. &nbsp;This is because the current semantics for `let` members do not allow the member to be initialized to anything other than the initial value if one is provided. &nbsp;I am hoping a solution to this will be identified in the future and have suggested one possible mechanism `@default` in the future enhancements section.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">3. Only ‘really' works for structs, the compiler doesn’t write a member-wise initialiser for classes (just a default initializer).</div></div></div></blockquote><div><br class=""></div><div>That is true about the current behavior of the language but is not true with regards to the current proposal.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><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></div></div></blockquote><div><br class=""></div><div>This proposal does not change anything with regard to the default initializer.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><div class=""><br class="">

</div>
<br class=""><div class=""><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></div></div></blockquote></div><br class=""></body></html>