> 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.

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

Reply via email to