> 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