> On Jan 30, 2017, at 1:30 AM, David Sweeris <daveswee...@mac.com> wrote:
> 
> 
>> On Jan 30, 2017, at 1:21 AM, Slava Pestov <spes...@apple.com 
>> <mailto:spes...@apple.com>> wrote:
>> 
>>> 
>>> On Jan 30, 2017, at 1:12 AM, David Sweeris via swift-evolution 
>>> <swift-evolution@swift.org <mailto: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.
> 
> Oh, I knew (well, suspected) it was intentional… I just didn't recall if we’d 
> discussed this specific scenario before. If we did, then I don’t want to 
> rehash it.

I think there was a proposal floating around for ‘flexible member-wise 
initialization’. This would allow explicitly defining an initializer (to make 
it public or @_inlineable or whatever) without writing out the boilerplate to 
initialize all members.

I don’t have the link offhand, and I don’t remember what the conclusion was, 
but if you’re interested you might want to look into it and revive it. ;-)

Slava

> 
> - Dave Sweeris

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to