Yes you can get close, but: 1. Its weird that you can only do this in an extension. 2. Its not quite the same as the proposal the current member-wise initialiser does not make the init arguments optional (the arguments themselves do not have defaults), i.e. with your example `let defaultOriginRect = Rect(size: Size(width: 5.0, height: 5.0))` fails whereas it would work for the proposal (this could also be true if the existing struct memberwise init and the new `memberwise init(..)` where changed to provide init argument defaults). 3. Only ‘really' works for structs, the compiler doesn’t write a member-wise initialiser for classes (just a default initialiser). 4. Still need the compiler to provide both default and member-wise initialisers, whereas this proposal would allow the existing default and member-wise initialisers to be deprecated and just the new member-wise initialiser would remain which would simplify the language and make it clear what was happening (this could also be true if a `memberwise init(..)` where added and existing compiler written inits removed).
> On 5 Jan 2016, at 10:16 AM, Matthew Johnson <[email protected]> wrote: > > struct Rect { var origin: Point = Point(), size: Size = Size() } > extension Rect { > init(center: Point, size: Size) { > let originX = center.x - (size.width / 2) > let originY = center.y - (size.height / 2) > self.init(origin: Point(x: originX, y: originY), size: size) > } > }
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
