[swift-evolution] [Proposal Draft] automatic protocol forwarding

Brent Royal-Gordon brent at architechies.com
Tue Dec 29 15:08:55 CST 2015

> I have completed a first draft of a proposal to introduce automatic protocol forwarding.  I’m looking forward to feedback from everyone!

Some things I don't see discussed here:

* Does it have to be a protocol? Why not also allow the concrete type of the property you're forwarding to? Obviously you couldn't form a subtype relationship (unless you could...), but this might be useful to reduce boilerplate when you're proxying something.

* Why the method-based conversion syntax for return values, rather than something a little more like a property declaration?

	var number: Int
	forward IntegerType to number {
		static return(newValue: Int) {
			return NumberWrapper(newValue)
		return(newValue: Int) {
			return NumberWrapper(newValue)

* If you want to keep the method-based syntax, why use the `init(_:)` initializer instead of one specifically for forwarding, like `init(forwardedReturnValue:)`?

* If you want to keep the method-based syntax, why do all forwards, even to different members, share the same transformation method? Wouldn't it be better to have, for instance, `init(returnedNumber:)` and `transformedReturnedNumber(_:)`, so that forwards to other properties could use different logic?

* If you want to keep the method-based syntax, would it make sense to instead have an initializer for instance initializers too, and just have it take a second parameter with the instance?

	init(forwardedReturnValue: Int) {...}
	init(forwardedReturnValue: Int, from: NumberWrapper) {...}

* Does this mean that a `public forward` declaration would forward `internal` members through synthesized `public` interfaces, if the forwarder and forwardee happened to be in the same module?

> All synthesized members recieve access control modifiers matching the access control modifier applied to the forward declaration.

* You don't explicitly mention this, but I assume mutating methods work and mutate `self`?

Brent Royal-Gordon

More information about the swift-evolution mailing list