> On Jan 30, 2017, at 1:12 AM, David Sweeris via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> So I’ve got this code in a package called “SomeLib":
> public struct SomeType {
>     public var text = "SomeText"
> }
> and then, in another package, write this:
> import SomeLib
> print(SomeType().text)
> and then run swift build, I get this error:
> error: 'SomeType' initializer is inaccessible due to 'internal' protection 
> level
> 
> "Well that’s odd… there isn’t even an initializer to be internal or public”, 
> I said to myself. Then I proceeded to futz around with it for a while before 
> having a lightbulb moment:
> public struct SomeType {
>     public var text = "SomeText"
>     public init() {} //this fixes it
> }
> 
> 
> In cases like this where the struct is public and all its stored properties 
> are both public and already have values, should we make the implicit init() 
> function also be public? Seems like the “least surprising” thing to do.

This is intentional. I believe the core team’s rationale is that public APIs 
should always be explicitly written down in source. So your example above 
defining a public init() is correct.

Slava

> 
> - Dave Sweeris
> _______________________________________________
> 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