[swift-evolution] Allow protocol vars to match derived types

Howard Lovatt howard.lovatt at gmail.com
Mon Mar 7 16:53:36 CST 2016


Looks like a compiler bug to me.

On Tuesday, 8 March 2016, Mark Anders via swift-evolution <
swift-evolution at swift.org> wrote:

> Consider the following (you can paste it in a Playground to see the error):
>
> class Node { }
>
> class Containable : Node{}
>
>
> protocol Refers {
>
>     var to : Node {get}
>
> }
>
>
> class Link : Refers {
>
>     var to : Node
>
>     init(n : Node) {
>
>         to = n
>
>     }
>
> }
>
>
> class Contains : Refers {
>
>     var to : Containable
>
>     init(c : Containable) {
>
>         to = c
>
>     }
>
> }
>
> This currently does not work because it seems that to adopt a protocol,
> the type of protocol var must match exactly.
>
> It would be great if objects could be said to adopt a protocol if the type
> of the var is the type or a derived type.
> This would allow me to treat the structure in a type safe way (i.e. only a
> Containable can have a Contains relationship),
> while me to have a set of Refers and iterate through each Node.
>
> Is there a reason why the type must match exactly?  Or could protocols be
> enhanced to to allow matching
> derived types, similar to assignment and func parameter rules?
>
>
> Mark
>


-- 
-- Howard.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160308/b4f0cc74/attachment.html>


More information about the swift-evolution mailing list