Default access control / Access control blocks


(Dan Raviv) #1

Hi,

While implementing a function which returns a struct as a result, I ran
into having to make not only the struct public but also its members,
otherwise external callers are exposed to the struct but not to its members.

1) Wouldn't it make sense for a public struct to have its fields be public
by default? Individual fields's access could still be overridden as
internal.

2) If the answer to 1 is no, does it make sense to have to specify the
access level for each individual field which shouldn't have default access
level? Why not have an access control block, e.g.

public struct Result {
    public {
        field1: Double
        field2: Int
    }
}

Please excuse me if similar functionality already exists and I'm not aware.

Thanks,
Dan


(Joe Groff) #2

For declarations that can be made in extensions, you can use `public extension` for this. That doesn't include stored properties, though we've discussed relaxing that restriction.

-Joe

···

On Mar 29, 2016, at 7:07 AM, Dan Raviv via swift-evolution <swift-evolution@swift.org> wrote:

Hi,

While implementing a function which returns a struct as a result, I ran into having to make not only the struct public but also its members, otherwise external callers are exposed to the struct but not to its members.

1) Wouldn't it make sense for a public struct to have its fields be public by default? Individual fields's access could still be overridden as internal.

2) If the answer to 1 is no, does it make sense to have to specify the access level for each individual field which shouldn't have default access level? Why not have an access control block, e.g.

public struct Result {
    public {
        field1: Double
        field2: Int
    }
}

Please excuse me if similar functionality already exists and I'm not aware.