Yes, and it does, and this is not the issue.  The problem is that when we 
generate the initializer for a private type it is invisible to those outside 
its scope (which is, by definition, everybody else).  X cannot be initialized 
and cannot declare any initializer that can possibly be visible because you 
cannot declare members with a higher access level than their containing 
declaration.

~Robert Widmann

2016/06/15 11:46、Adrian Zubarev via swift-evolution <swift-evolution@swift.org> 
のメッセージ:

> Shouldn’t it act theoretically something like this:
> 
> // Begin file A (which acts like a scope)
> 
> // where `type` can be enum, struct, class or protocol
> private type X {}  
> 
> fileprivate type Y {}
> 
> public struct Z {
>      
>     var x: X
>     var y: Y
> }
> // End file A
> private should always behave the same as fileprivate on the same scope level 
> of declaration, where fileprivate is accessible from anywhere within the same 
> file no matter in which level it was declared.
> 
> // Begin file A (which acts like a scope)
> 
> public struct Z {
>      
>     fileprivate var a = 0
>     private var b = "z"
> }
> 
> public struct X {
>      
>         static func foo() {
>              
>             var z = Z()
>             z.a // a is visible here
>             z.b // raises an error because b is not visible from that scope
>         }
> }
> // End file A
> That how I imagine this to work.
> 
> 
> 
> -- 
> Adrian Zubarev
> Sent with Airmail
> 
> Am 15. Juni 2016 um 20:32:09, Robert Widmann via swift-evolution 
> (swift-evolution@swift.org) schrieb:
> 
>> While implementing SE-0025 (fileprivate), I noticed an interesting bug in 
>> the proposal. Under the implementation outlined there, any top-level 
>> structure, class, or enum declared private cannot possibly be instantiated 
>> and so cannot be used in any way. Because of this, private top-level 
>> declarations are more often than not blown away entirely by the compiler for 
>> being unused. It seems strange to me to allow a key language feature to act 
>> solely as a hint to the optimizer to reduce the size of your binary. Perhaps 
>> the restrictions around private needs to be relaxed or the line between 
>> fileprivate and private needs to be investigated again by the community 
>> before inclusion in the language.
>> 
>> Thoughts?
>> 
>> ~Robert Widmann
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to