[swift-evolution] final + lazy + fileprivate modifiers

Jonathan Hull jhull at gbis.com
Mon Feb 20 06:57:37 CST 2017

> On Feb 20, 2017, at 3:43 AM, Ross O'Brien via swift-evolution <swift-evolution at swift.org> 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.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170220/bcfb45be/attachment.html>

More information about the swift-evolution mailing list