[swift-evolution] [Review] SE-0030 Property Behaviors

Brent Royal-Gordon brent at architechies.com
Mon Feb 22 19:13:29 CST 2016

(Resending due to the issue with the lists this afternoon.)

>> I don't think "abstract" is the right keyword to use, but I do agree that "accessor" might not be the perfect term for this feature. Not sure what would be better, though.
> Why? "abstract" is quite common for denoting a method requirement, so I think it is quite appropriate here.

Except in Swift, which has no abstract members at all; it instead leaves that job to protocols.

Unfortunately, constructing an analogy to protocols doesn't give you a good keyword to use. `protocol` won't do, because that's the name for the whole, not the parts. The individual parts are called requirements, but the `required` keyword actually serves a different role, and it would be misleading here because many accessors are defaulted.

Actually, if I had to pick a word, it might be "delegate". This is essentially a delegation pattern: we're calling back into the type applying the property to ask it what to do. Call the block a property delegate:

	@json var foo: Foo? {
		// This thing is now the "property delegate"
		toJSON {
			// This is a "delegate method"
			return value.json
		fromJSON {
			// So is this
			return Foo(JSON: json)

And then mark each method to be provided by it with the `delegate` keyword:

	delegate toJSON(value: Value) -> JSONValue
	delegate fromJSON(json: JSONValue) -> Value
	// Or
	delegate func toJSON(value: Value) -> JSONValue
	delegate func fromJSON(json: JSONValue) -> Value

Brent Royal-Gordon

More information about the swift-evolution mailing list