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
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
let foo = 42
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.
On 17 May 2016, at 15:48, Neil Faiman <firstname.lastname@example.org> wrote:
On May 17, 2016, at 7:03 AM, Jeremy Pereira <email@example.com> wrote:
On 16 May 2016, at 22:37, Neil Faiman via swift-users <firstname.lastname@example.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”.
“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)