<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jun 29, 2016 at 4:07 PM, Jordan Rose <span dir="ltr">&lt;<a href="mailto:jordan_rose@apple.com" target="_blank">jordan_rose@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span class=""><br><div><blockquote type="cite"><div>On Jun 29, 2016, at 14:03, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jun 29, 2016 at 3:15 PM, Jordan Rose via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><br>
<br>
&gt; On Jun 29, 2016, at 13:13, Jose Cheyo Jimenez &lt;<a href="mailto:cheyo@masters3d.com" target="_blank">cheyo@masters3d.com</a>&gt; wrote:<br>
&gt;<br>
&gt; I know this might be have been brought up before but<br>
&gt;<br>
&gt; why not just disallow the “private&quot; keyword for top level types, extensions etc.<br>
&gt;<br>
&gt; A fixit could change top level `private` to `fileprivate`.<br>
&gt;<br>
&gt; I think this is a little less confusing since effectively this is what is happening in the background.<br>
<br>
</span>That doesn’t fix anything for inner types, so it’s a lot less important than the rest of the amendment.<br>
<br>
There actually is an answer to this, which is that the core team expects &#39;private&#39; to be the common keyword, and therefore it’s better if you can use it at the top level and ignore ‘fileprivate’ altogether in most programs.<br></blockquote><div><br></div><div>On second thought, wouldn&#39;t all of this be inapplicable if `private` literally meant visibility *only* within the current declaration, and neither outside it nor inside any nested types, etc.?</div></div></div></div></div></blockquote><br></div></span><div>Yes, but that&#39;s not very useful:</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>public struct Foo {</div><div>  private var value: Int = 0</div><div>  public func test() {</div><div>    print(value) // error</div><div>  }</div><div>}</div></blockquote><div><br></div><div>I suppose you could say that nested <i>types</i> are different from nested <i>functions,</i> but then we start getting complexity in a different direction. And it still doesn&#39;t fix the default access within a private type.</div></div></blockquote><div><br></div><div>Let me offer a principled rule: if I write `private var foo`, then `foo` is invisible at such places within the declaration where writing `private var bar` at the same place would cause `bar` to be visible where `foo` is not or vice versa.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span class="HOEnZb"><font color="#888888"><div></div><div>Jordan</div></font></span></div></blockquote></div><br></div></div>