> On Feb 20, 2017, at 3:43 AM, Ross O'Brien via swift-evolution 
> <[email protected]> wrote:
> 
> As Goffredo Marocchi said, I don't want to return to Objective C's dozen 
> import statements at the top of a file, but how would we denote that a file 
> is a member of a submodule? At the moment I think there are four ways - have 
> I missed any?
> 
> 1) Submodules correspond directly to file directories (simple, but possibly 
> binds a project too closely to an operating system, inflexible for systems 
> like Git).
> 2) The submodule has an access control file which lists its member files (as 
> modules do)
> 3) Files opt-in to membership of a submodule (e.g. 'memberOf Submodule' just 
> below 'import Foundation')
> 4) Files 'friend' other files into their submodule, somehow.

For #4, my suggestion has been to add a single keyword ‘hidden’.  Marking 
something hidden means that things outside of the file can’t see it. 

        public struct MyStruct {
                var a:Int //This is ‘internal' 
                hidden var b:Int //This is also ‘internal’, but is hidden, so 
is not visible outside the file
        }

To let a file see the hidden items, you ‘import hidden’ instead of just 
‘import’:

        import hidden MyStruct  //Now ‘b' is visible within this file

Because it is still internal, b is still only accessible within the module 
(even with ‘import hidden’).  If it was a ‘public hidden var’ or ‘open hidden 
var’ then it could be accessed via ‘import hidden’ outside the module as well.

Make sense?

I think this is the simplest way to get behavior similar to protected, friends, 
and submodules… all with swift’s file-based access approach.

Thanks,
Jon
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to