> On 17 May 2016, at 15:48, Neil Faiman <[email protected]> wrote:
>
> On May 17, 2016, at 7:03 AM, Jeremy Pereira <[email protected]>
> wrote:
>
>>
>>> On 16 May 2016, at 22:37, Neil Faiman via swift-users
>>> <[email protected]> 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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users