> 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