[swift-users] Member wise initializer doesn't work with default-initialized const properties
Jeremy Pereira
jeremy.j.pereira at googlemail.com
Tue May 17 11:42:20 CDT 2016
> On 17 May 2016, at 15:48, Neil Faiman <neil at faiman.org> wrote:
>
> On May 17, 2016, at 7:03 AM, Jeremy Pereira <jeremy.j.pereira at googlemail.com> wrote:
>
>>
>>> On 16 May 2016, at 22:37, Neil Faiman via swift-users <swift-users at 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.
More information about the swift-users
mailing list