I think I like the idea... However IMHO this really feels like something that 
should be part of a macro system, not a "proper" language feature.

- Dave Sweeris

> On Apr 16, 2016, at 08:17, Jonathan Hull via swift-evolution 
> <[email protected]> wrote:
> 
> Since we know the types of the properties, how about we replace the type in 
> the signature with either an indication that the property should be 
> automatically set, or better yet, the property which should be set:
> 
> class Foo
> {
>       let foo : String
>       let bar : String
>       let barCount : Int
>       let baz : Int
> 
>       init(foo: self.foo, bar: self.bar, baz: self.baz)
>       {
>               self.barCount = bar.characters.count
>       } 
> }
> 
> That way you don’t always have to have the init’s parameter names match the 
> names of the properties they set (even though they often would).  We could 
> also allow a leading dot as a shorthand for ‘self.’
> 
>       init(foo: .foo, bar: .bar, baz: .baz)
>  
> I think I like explicit ‘self.’ better, but that may just be my preference.  
> In either case, the generated interface would show the actual type.
> 
>       // init(foo: String, bar: String, baz: Int)
> 
> Thanks,
> Jon
> 
>> This is a common pattern for initialisers at the moment:
>> 
>> class Foo
>> 
>> {
>> 
>> let foo : String
>> 
>> let bar : String
>> 
>> let barCount : Int
>> 
>> let baz : Int
>> 
>> 
>> init(foo: String, bar: String, baz: Int)
>> 
>> {
>> 
>> self.foo = foo
>> 
>> self.bar = bar
>> 
>> self.baz = baz
>> 
>> barCount = bar.characters.count
>> 
>> }
>> 
>> }
>> 
>> This involves a lot of using 'self.'. For those who prefer not to use
>> 'self.' explicitly everywhere, this is probably the main place it gets
>> used. It's a lot of boilerplate code.
>> 
>> How would it be if, like default variables, we could pack some of that
>> information into the argument tuple, and unify parameters with properties
>> immediately?
>> 
>> class Foo
>> 
>> {
>> 
>> let foo : String
>> 
>> let bar : String
>> 
>> let barCount : Int
>> 
>> let baz : Int
>> 
>> 
>> init(self.foo: String, self.bar: String, self.baz: Int)
>> 
>> {
>> 
>> barCount = bar.characters.count
>> 
>> }
>> 
>> }
>> 
>> Less boilerplate, more focus on the properties which need to be generated.
>> 
>> Thoughts?
> 
> _______________________________________________
> 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