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

David Hart david at hartbit.com
Tue Mar 8 01:06:59 CST 2016


If it’s an obvious omission, is it better to have it as a bug than a formal proposal?

> On 08 Mar 2016, at 00:16, Joe Groff via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
>> On Mar 7, 2016, at 8:12 AM, Mark Anders via swift-evolution <swift-evolution at swift.org <mailto: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?  
> 
> No fundamental reason, this just isn't something we've had time to implement. It should be straightforward to support.
> 
> -Joe
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

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


More information about the swift-evolution mailing list