Properties with initial values

struct S {
    let s: String = "hello"
    let i: Int = 42

    // user declares:
    memberwise init() {}
    // compiler synthesizes:
    init(s: String = "hello", i: Int = 42) {
        self.s = s
        self.i = i
    }
}

I think the sticking issue here is that this synthesis isn't congruent with the 
current rules around let:

struct S {
        let s: String = "hello"
        let i: Int = 42

        init(s: String = "hello", i: Int = 42) {
                self.s = s
                self.i = i
                //note: initial value already provided in 'let' declaration
                //note: change 'let' to 'var' to make it mutable
        }
}

4) var properties with default initializers should have their parameter to the 
synthesized initializer defaulted.

I don't think anyone would have issue with this:

struct S {
    var s: String = "hello"
    var i: Int = 42

    // user declares:
    memberwise init() {}
    // compiler synthesizes:
    init(s: String = "hello", i: Int = 42) {
        self.s = s
        self.i = i
    }
}



> On Dec 22, 2015, at 1:02 PM, Matthew Johnson via swift-evolution 
> <[email protected]> wrote:
> 
> 
>> On Dec 22, 2015, at 12:51 PM, Guillaume Lessard via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> Hi,
>> 
>> Regardless of anything else in the proposal, I strongly dislike its 
>> attempted subversion of `let` properties.
>> 
>> struct A {
>>  let member = 1 // It’s done, over. If that’s not what you want, don’t 
>> initialize it here.
>> }
>> 
> 
> This is not an attempt to subvert `let` properties.  The `= 1` in the 
> declaration can very reasonably be viewed as a default value that should be 
> used if the member is not otherwise initialized.
> 
> Why would you have an immutable instance member that is always going to have 
> a constant value of 1?  That just wastes space by duplicating the constant 
> value in many instances.  However it is quite reasonable to have an immutable 
> instance member that defaults to 1, but may have a different value depending 
> on the initializer that is used for the instance.
> 
> Matthew
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to