[swift-evolution] Question about heterogeneous collections
jgroff at apple.com
Fri Apr 1 12:31:39 CDT 2016
> On Apr 1, 2016, at 8:17 AM, Maximilian Hünenberger via swift-evolution <swift-evolution at swift.org> wrote:
> See inline
>> Am 31.03.2016 um 20:14 schrieb Dave Abrahams via swift-evolution <swift-evolution at swift.org>:
>>> on Tue Mar 29 2016, Jason Sadler <swift-evolution at swift.org> wrote:
>>> Hi folks,
>>> I have an issue with using a heterogeneous array of objects conforming
>>> to a protocol - I want to write an extension on Array (or
>>> CollectionType) that applies only when Element : MyProtocol, but I
>>> can’t call methods in that extension from an instance of [MyProtocol]
>>> because "Using ‘MyProtocol' as a concrete type conforming to protocol
>>> ‘MyProtocol' is not supported”
>> Hint: write your extension so it applies when Element == MyProtocol instead.
> Why don't we also imply `Element == MyProtocol` when using `Element: MyProtocol` ?
> Both extensions can have the exact same functions/implementation.
> Am I missing something?
> I currently don't see why we are forced to distinguish between homogeneous and heterogeneous Collections.
To some degree this is an implementation limitation; right now our type checker has the silly limitation that the MyProtocol type is *never* considered to conform to the MyProtocol protocol. However, there are cases where this is formally impossible. If MyProtocol has static method or initializer requirements, or uses the `Self` type in argument position, then the MyProtocol type can't be a model of its own protocol without additional work.
> Kind regards
> - Maximilian
>>> (For more background, my full use case can be seen in this gist: https://gist.github.com/sadlerjw/2cc16b4375b02fe7f400)
>>> I’ve asked about this on swift-users
>>> and got some good workarounds but no one was able to provide me with
>>> information on any future plans in swift to address this issue -
>>> whether that’s making protocols conform to themselves, or some other
>>> improved approach to heterogeneous collections. I wonder if anyone
>>> here can shed some light on this? (I’m new to the mailing lists,
>> swift-evolution mailing list
>> swift-evolution at swift.org
> swift-evolution mailing list
> swift-evolution at swift.org
More information about the swift-evolution