Sent from my iPad

> On May 17, 2016, at 11:42 AM, Jeremy Pereira via swift-users 
> <swift-users@swift.org> wrote:
> 
> 
>> On 17 May 2016, at 15:48, Neil Faiman <n...@faiman.org> wrote:
>> 
>> On May 17, 2016, at 7:03 AM, Jeremy Pereira 
>> <jeremy.j.pere...@googlemail.com> wrote:
>> 
>>> 
>>>> On 16 May 2016, at 22:37, Neil Faiman via swift-users 
>>>> <swift-users@swift.org> wrote:
>>>> 
>>>> Using the default Swift with Xcode 7.3.1.
>>>> 
>>>> It appears that you cannot use the implicit memberwise initializer with a 
>>>> struct that has “let” properties with default values.
>>>> 
>>>> 
>>> 
>>> It’s not a default value, it is *the* value
>>> 
>>>> 
>>>> I don’t believe that the Apple _The Swift Programming Language_ mentions 
>>>> this restriction.
>>> 
>>> Chapter “The Basics”, section “Constants and Variables”
>>> 
>>> “The value of a constant cannot be changed once it is set”.
>> 
>> But:
>> 
>> “You can provide a default value for a stored property as part of its 
>> definition, as described in Default Property Values. You can also set and 
>> modify the initial value for a stored property during initialization. This 
>> is true even for constant stored properties, as described in Assigning 
>> Constant Properties During Initialization.” (Classes and Structures / Stored 
>> Properties)
> 
> 
> And did you try clicking through to “Assigning Constant Properties During 
> Initialisation”? It says this:
> 
> “Once a constant property is assigned a value, it cannot be further modified”
> 
> I would argue that in 
> 
> struct A 
> {
>    let foo = 42
> }
> 
> foo has been assigned a value and cannot be further modified. The only way 
> your interpretation can work is if the assignment in the declaration line is 
> deemed to occur somehow before initialisation, which is a valid 
> interpretation, but since 
> 
> struct A 
> {
>    let foo = 42
>    init(foo: Int)
>    {
>        self.foo = foo
>    }
> }
> 
> is an error, it looks like the compiler writers went with my interpretation. 
> 
> I certainly concede that it looks like the passage you found contradicts the 
> two passages I found. Perhaps one of us should raise a bug to clarify the 
> meaning and - if you are correct - fix the compiler.

This behavior was discussed quite extensively during in the threads and review 
of my memberwise init proposal.  It is likely to be revised in some way when 
memberwise init is revisited, perhaps in Swift 4.  You may wish to look up the 
feedback the core team gave at the conclusion of the review if you're 
interested in details.

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

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

Reply via email to