<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">I see that this feature is fully type safe and has behaviour that is precedent in the language today (It is just sugar after all). I still feel like it is not safe by default and doesn’t discourage the use dynamic programming over static.</div><div class=""><br class=""></div><div class="">----Obviously for the latter if Swift doesn’t/shouldn’t have a preference between the two then by all means disregard as a reason for this design.</div><div class=""><br class=""></div><div class="">A way I see to accomplish both of these simultaneously is to have types that conform to DynamicMemberLookup is to force them to write subscripts that return optionals (and later throws if that ever gets support). To get return types that aren’t Optional a type would have to use a @unchecked attribute on the protocol conformance.</div><div class=""><br class=""></div><div class="">For Example:</div><div class=""><br class=""></div><div class="">enum JSON : DynamicMemberLookup {</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>subscript(dynamicMember: String) -&gt; JSON {</div><div class=""><span class="Apple-tab-span" style="white-space:pre">                </span>...</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div class="">}</div><div class=""><br class=""></div><div class="">would be a compile error, where as:</div><div class=""><br class=""></div><div class="">[*]</div><div class=""><div class="">enum JSON : @unchecked DynamicMemberLookup {</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>subscript(dynamicMember: String) -&gt; JSON {</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">                </span>...</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>}</div><div class="">}</div></div><div class=""><br class=""></div><div class="">OR</div><div class=""><br class=""></div><div class=""><div class="">enum JSON : DynamicMemberLookup {</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>subscript(dynamicMember: String) -&gt; JSON? {</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">                </span>...</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>}</div><div class="">}</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">would work fine.</div><div class=""><br class=""></div><div class="">I think one should also be able to override @unchecked and make conforming types checked.</div><div class="">So following on from the code example [*] if I were to write</div><div class=""><br class=""></div><div class="">extension JSON : @checked DynamicMemberLookup {}</div><div class=""><br class=""></div><div class="">then later dynamic member lookups would wrap the results in an optional.</div><div class=""><br class=""></div><div class="">Supporting this the other way (make a type unchecked) might not be ideal since the author of the type saw it unfit to have it unchecked and we should probably respect that.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">I’m aware of #3 of “Reducing Potential Abuse” in the proposal however that option is not well expanded. So I’m not sure if this falls into that.</div><br class=""><div class="">
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: 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-size-adjust: auto; -webkit-text-stroke-width: 0px;">-Letanyan</div><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: 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-size-adjust: auto; -webkit-text-stroke-width: 0px;" class=""><br class=""></div><br class="Apple-interchange-newline">
</div>
<br class=""></body></html>