<div dir="ltr"><br><div class="gmail_extra">On 30 October 2017 at 18:07, Adam Kemp <span dir="ltr">&lt;<a href="mailto:adam_kemp@apple.com" target="_blank">adam_kemp@apple.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><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"><div style="word-wrap:break-word;line-break:after-white-space"><div><span class="gmail-"><blockquote type="cite"><div>On Oct 30, 2017, at 10:57 AM, Mike Kluev &lt;<a href="mailto:mike.kluev@gmail.com" target="_blank">mike.kluev@gmail.com</a>&gt; wrote:</div><div><div dir="ltr"><br><div class="gmail_extra"><br></div><div class="gmail_extra">the new bucket would be &quot;class and all of its extensions be them in the same file or in different files”.<br></div></div></div></blockquote><div><br></div></span><div>That’s not a new bucket. It is equivalent to either internal or public, depending on whether you want to extend this beyond the module boundary. The set of code you would have to audit is the same.</div></div></div></blockquote><div><br></div><div>it is different, see below:</div><div><br></div><div>=== file: Some.swift</div><div><br></div><div>class Some {</div><div>   internal func foo() {</div><div>      bar()</div><div>   }</div><div>   classprivate func better() {</div><div>      good()</div><div>    }</div><div>}</div><div><br></div><div>=== file: Some+Bar.swift</div><div><br></div><div>extension Some {</div><div>  internal func bar() {</div><div>      foo()</div><div>  }</div><div>  classprivate func good() {</div><div>      better()</div><div>   }</div><div>}</div><div><br></div><div>=== any other file (same module)</div><div><br></div><div>class Other {</div><div>    func x() {</div><div>        let some = Some()</div><div><br></div><div>        some.foo() // ************** UNWANTED!!!!!!</div><div>        </div><div>        some.better() // error.  ****** WANTED!</div><div>    }</div><div>}</div><div><br></div><div>I do not want to audit the class Other when I make a change to &quot;foo&quot; or &quot;bar&quot;, which are essentially &quot;private&quot; and only made &quot;internal&quot; because of the language limitation in regards to &quot;private&quot; vs &quot;multi-file class&quot; issue.</div><div><br></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"><div style="word-wrap:break-word;line-break:after-white-space"><div><div><br></div><div>What does marking a method as “specialprivate” (my made up name for this new access level) tell clients about who can use it or how it can be used?</div></div></div></blockquote><div><br></div><div>it tells them: &quot;you can&#39;t use this, unless you are writing an extension to this class or making changes to this class itself&quot;</div></div><br></div><div class="gmail_extra">Mike</div><div class="gmail_extra"><br></div></div>