> On May 29, 2016, at 9:20 PM, Matthew Johnson <matt...@anandabits.com> wrote:
> 
> On May 29, 2016, at 5:43 PM, Charles Srstka via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> 
>>> On May 29, 2016, at 5:16 PM, Austin Zheng <austinzh...@gmail.com 
>>> <mailto:austinzh...@gmail.com>> wrote:
>>> 
>>> I think the problem here is that P == P is true, but P : P is not (a 
>>> protocol does not conform to itself).
>> 
>> But if you have a variable, parameter, etc. typed as P, that’s *not* the 
>> protocol, since protocols aren’t concrete entities. What you have there, by 
>> definition, is something that conforms to P. Similarly, something like [P] 
>> is just a collection of things, perhaps of various types, which all have the 
>> common feature that they conform to P.
> 
> You have an existential value of type P.  It is a well known frustration in 
> Swift that the existential type corresponding to a protocol does not conform 
> to the protocol.  This has been discussed off and on at different times.  
> 
> There are a couple of reasons this is the case.  IIRC in some cases it 
> actually isn't possible for the existential to conform to the protocol in a 
> sound way.  And even when it is possible, I believe it has been said that it 
> is more difficult to implement than you might think.  Hopefully the situation 
> will improve in the future but I'm not aware of any specific plans at the 
> moment.

It’s been my understanding that a variable typed P in swift is equivalent to 
what we would have called id <P> in Objective-C—that is, an object of unknown 
type that conforms to P. Is this not the case? I am curious what the conceptual 
difference would be, as well as the rationale behind it.

Charles

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to