<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">The proposal says that "let" properties with inline initializers should be left out of the memberwise initialization, AIUI on the grounds that a manually-written initializer would not be allowed to override the inline initialization:<div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">class C {</div><div class=""> let x = 1738</div><div class=""> init(x: Int = 679) {</div><div class=""> self.x = x // Error, self.x already initialized</div><div class=""> }</div><div class="">}</div><div class=""><br class=""></div></blockquote>However, this is also true for vars. Semantically, if you change 'x' to a var in the above example, you get an initialization followed by an assignment:<div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class="">class C {</div></div><div class=""><div class=""> let x = dump(1738)</div></div><div class=""><div class=""> init(x: Int = dump(679)) {</div></div><div class=""><div class=""> self.x = x</div></div><div class=""><div class=""> }</div></div><div class=""><div class="">}</div></div></blockquote><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span> C() // dumps 1738, then 679</div><div class=""><br class=""></div><div class="">which, if the initialization has side effects, will likely be surprising. We could say that the memberwise initializer elides the inline initialization of `var`s, on the grounds that initializations ought not to have side effects, but then we're introducing a behavior change in inline initializers for `var`s in the face of `memberwise` initializers that also cannot be replicated by a manually-written initializer. If we make that behavior change for vars, I think it's reasonable, and more orthogonal, to extend the same grace to lets as well. That also simplifies the rules for what appears in the memberwise initializer—there's now only two rules (or one, if we also remove the access control filter, as I've suggested in another subthread).</div><div class=""><br class=""></div><div class="">-Joe</div></body></html>