<div dir="ltr"><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">&gt; Swift&#39;s rule for attribues/keywords is that keywords usually modify type of variable; attributes do not.<br>[citation needed]<br>As far as I can tell, this is not true at all. Most declaration modifiers do *not* change the type of anything; as far as I can tell, only `mutating`, `nonmutating`, and possibly `optional` do. Meanwhile, several attributes—particularly `@noescape` and `@autoclosure`—*do* change the type. So where is this belief coming from?</blockquote></div><div><br></div>When I wrote &quot;modify type&quot;, I did not mean distinction between declaration and type modifiers.<div><br><div>For example, if  @autoclosure  was used as  @autoclosure Int , then I&#39;d say that it &quot;changes&quot; its base type.</div><div>On the other hand, I&#39;d say that  @autoclosure () -&gt; Int  &quot;keeps&quot; its base type.</div><div><br></div><div>In the same sense, `lazy` does not have any visible changes on type of its property.<br></div><div>On the other hand, `weak` effectively changes property type from T to T?</div><div>`unowned` effectively changes T to T!</div><div><br></div><div>The main driver was actually property behaviours proposal, and I think the discussion stopped at attribute syntax being most appropriate.</div><div>If that changes later, and property behaviours is accepted, we will have to move @lazy, along with @NSCopying and others, to the new syntax.</div><div><br></div><div>- Anton</div></div></div>