[swift-evolution] [Pitch] Unifying init parameters with properties

Yogev Sitton yogev.sitton at gmail.com
Sun Apr 17 03:57:37 CDT 2016


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?
> 
> 
> 


More information about the swift-evolution mailing list