[swift-users] Access level of members defined in an extension
Martin R
martinr448 at gmail.com
Fri Dec 9 15:32:13 CST 2016
I have a question about the relationship between the access level of an extension
and the access level of members defined in that extension.
The "Access Control" chapter in "The Swift Programming Language" states about extensions:
Alternatively, you can mark an extension with an explicit access-level modifier
(for example, private extension) to set a new default access level for all members
defined within the extension. This new default can still be overridden within the
extension for individual type members.
But apparently the access level of a member can only be equal to or lower than the
access of the extension in which it is defined, and the compiler warns if I try to
increase it:
private class MyClass {
public func foo() { } // No warning
}
private extension MyClass {
public func bar() { } // warning: declaring a public instance method in a private extension
}
There is no warning for `func foo` which is defined in the class itself, only for
`func bar` which is defined in an extension.
SE-0117 states that
... the true access level of a type member is computed as the minimum of the true
access level of the type and the declared access level of the member.
My questions are:
- Does a similar statement hold for members defined in an extension, i.e. the true
access level is the minimum of the declared access level and the access level of
the extension in which it is defined? In other words, I can only lower the default
access level of the extension, but not increase it.
- Why does the compiler warn if I define a member with a higher access level in an
extension, but not if I do the same in the main class definition?
Regards,
Martin
More information about the swift-users
mailing list