A new keyword that stands in for a tedious initializer of arbitrary length

I'd say this:

struct Circle {
    var x, y: Double
    var radius: Double = 1
    
    init(x, y, radius) // the "member-wise" init we know and love
    init(y, x, radius) // with parameters reordered
    init(x, y) // omitting default parameters
    init(x, y = 2, radius = 3) // with new defaults added
    init(a x, b y, radius) // with parameters renamed
    init(_ x, _ y, radius) // with parameters renamed

    init(x, y, radius) { // with added logic when needed
        self.radius = radius * 2
    }
    init(x, y, radius: Int, somethingElse: T) { // with added logic when needed
        self.radius = Double(radius)
        ...
    }
}
3 Likes