[swift-evolution] PITCH: Return a subclass for a protocol method without the need for an associatedtype

Adrian Zubarev adrian.zubarev at devandartist.com
Thu Sep 1 13:44:39 CDT 2016

I’m definitely not an expert on the technical part of this but I wonder if this idea can be generalized.

It would be great if one could override the type A of a member from the supertype with type B iff there is a subtype or conformance relationship like B : A. I believe this would reduce the usage of associated and generic workaround types a lot.

As an example we could take a look at UIView where we have a variable var layerClass: AnyClass.

With the mentioned ability we could make it typesafe.

class UIView {
    var layerClass: CALayer { … }

class CustomLayer : CALayer {}

class CustomView : UIView {
    override var layerClass: CustomLayer { … }
That would be awesome. :)

Adrian Zubarev
Sent with Airmail

Am 1. September 2016 um 05:03:15, Karl via swift-evolution (swift-evolution at swift.org) schrieb:

On 31 Aug 2016, at 06:10, Sitton, Yogev via swift-evolution <swift-evolution at swift.org> wrote:

That’s was my point.
Two sets of rules for the same case in two different places.
These should be unified.

I’ll write the proposal and create a pull request.

On Aug 17, 2016, at 11:24 PM, Slava Pestov <spestov at apple.com> wrote:

On Aug 17, 2016, at 10:18 AM, Vladimir.S via swift-evolution <swift-evolution at swift.org> wrote:

But yes, strictly speaking 'make()->Circle?' conforms to protocol requirement 'make()->Shape?', it does returns 'Shape?', so I believe this should be treated as conformance to MyShapeProtocol protocol.

I agree this should be made to work, especially since method overriding supports the exact same scenario.

We have two sets of rules, implemented in two different places, for matching method overrides and protocol witnesses. We need to unify the rules and the code.


Sounds like you could save yourself some trouble and just file a bug report instead?

swift-evolution mailing list
swift-evolution at swift.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160901/41402b2a/attachment.html>

More information about the swift-evolution mailing list