This is an interesting idea.
Although I didn’t like this at first read - it will remove a lot of generic 
init methods from my code that all they do is just fill properties with values.

> 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

Reply via email to