[swift-evolution] classprivate protection level?

Mike Kluev mike.kluev at gmail.com
Mon Oct 30 13:19:34 CDT 2017


On 30 October 2017 at 18:07, Adam Kemp <adam_kemp at apple.com> wrote:

> On Oct 30, 2017, at 10:57 AM, Mike Kluev <mike.kluev at gmail.com> wrote:
>
>
> the new bucket would be "class and all of its extensions be them in the
> same file or in different files”.
>
>
> 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.
>

it is different, see below:

=== file: Some.swift

class Some {
   internal func foo() {
      bar()
   }
   classprivate func better() {
      good()
    }
}

=== file: Some+Bar.swift

extension Some {
  internal func bar() {
      foo()
  }
  classprivate func good() {
      better()
   }
}

=== any other file (same module)

class Other {
    func x() {
        let some = Some()

        some.foo() // ************** UNWANTED!!!!!!

        some.better() // error.  ****** WANTED!
    }
}

I do not want to audit the class Other when I make a change to "foo" or
"bar", which are essentially "private" and only made "internal" because of
the language limitation in regards to "private" vs "multi-file class" issue.


> 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?
>

it tells them: "you can't use this, unless you are writing an extension to
this class or making changes to this class itself"

Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20171030/10827c39/attachment.html>


More information about the swift-evolution mailing list