Right. You could have a protocol X that hypothetically had something like &#39;let x&#39; in it. If struct S implemented X and let x = 17 and class C implemented X and let x = 42 you now have a let variable that could take on multiple values depending on the implementing type which defeats the whole point of the let in the first place. Not to mention what Dmitri said about protocol implementers calculating the value of the let which would really defeat the purpose. The syntax &#39;var ... { get }&#39; is much more in line with reality than &#39;let ...&#39;.<div><br>On Friday, January 29, 2016, Brent Royal-Gordon &lt;<a href="mailto:brent@architechies.com">brent@architechies.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">&gt; So what about protocols requiring ‘var … { get }’ syntax for read only properties? Is there some sort of underlying reason for this confusing syntax instead of ‘let …’? Now that Swift allows deferred initialization of lets does this requirement make sense?<br>
<br>
`let` doesn&#39;t mean &quot;no setter&quot;, it means &quot;constant&quot;. For instance, you can&#39;t make a `weak let`, because the `weak` implies the variable can be nilled. There&#39;s no way to require a constant in a protocol, but if there were one, that&#39;s what `let ...` would mean.<br>
<br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
<br>
</blockquote></div>