<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="">willSet and didSet are currently not even called from the init method. This also goes counter to the current property behaviors proposal (didGet and didSet would become part of that) because behaviors aren't planned for let properties.<div class=""><br class=""></div><div class="">You're saying you want it to happen as soon as it was set, but do you really need it "as soon as that" or can you afford to wait a little bit? Because you can probably just put most of that code at the end of your initializer, where it's guaranteed that the property has been set.<br class=""><div class=""><br class=""><div class="">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Lucida Grande';  font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">Félix</span>
</div>

<br class=""><div><blockquote type="cite" class=""><div class="">Le 23 déc. 2015 à 10:22:46, shengjia wang via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; a écrit :</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Since swift v1.2, we can initialize `let` property in `init()` instead of being forced to give a value when declare it. This is great !&nbsp;<br class=""></div><div class=""><br class=""></div><div class="">But every time I run into the case such as the example below:</div><div class=""><br class=""></div><div class="">let view: UIView {</div><div class="">&nbsp; didSet {</div><div class="">&nbsp; &nbsp; /**&nbsp;</div><div class="">&nbsp; &nbsp; &nbsp;* This time, `view` did set ( a.k.a initialized in case of `let` property), so I want to bind some other actions just after, such as `setBackgroundColor`. But actually I can't, compiler will complain that `let` declaration can not be observing properties. So I have to either move all these "actions" to `init()` or change `view` to a `var` property which is not necessary at all.</div><div class="">&nbsp; &nbsp; &nbsp;*/</div><div class="">&nbsp; }</div><div class="">}</div><div class=""><br class=""></div><div class="">Actually in swift, I think it's quite commun issue that people run into a large `init()` method. This approach could make it way better in most cases.</div><div class=""><br class=""></div><div class="">So, I'm wondering why not make `didSet` also available for `let` property, or maybe even better to add new keyword such as "didInit" which only get called for first set.</div><div class=""><br class=""></div><div class="">- Victor Wang</div></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=iRI3beHTe3UxYAHTlV3lA38zIPfHMhyuRzgTmGKV6k4hWgQ7LZ7-2BWMRdXW5ysMCIHZFfUSVobq6HMsNSYzHc3V1qcmcu0ijmD4VuwnWEfIpCxIhMF1QoF1fAQih46hMUIDz96AIlkQgMMx1NEvV3YQAMeORgRPYyzw-2BGQozWLv583tnPyNdfEA5zEj-2FXriCkpWyKLZu6bl4vW2xFbdyf7lu-2BgY5pIYTthLI1cJaFwMY-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></div></div></body></html>