[swift-evolution] [Discussion] Allowing extending existentials

David Hart david at hartbit.com
Wed Feb 22 01:25:15 CST 2017


Yes, but it's not very discoverable. Plus, if the subclass existentials proposal is accepted, it would actually allow us to do:

class C {}
extension C & P1 {}

> On 22 Feb 2017, at 08:06, Jacob Bandes-Storch <jtbandes at gmail.com> wrote:
> 
> This works today:
> 
> protocol P1{}
> protocol P2{}
> 
> extension P1 where Self: P2 {
>     func foo() {}
> }
> 
> func bar(x: P1 & P2) {
>     x.foo()
> }
> 
> 
>> On Tue, Feb 21, 2017 at 10:53 PM, David Hart via swift-evolution <swift-evolution at swift.org> wrote:
>> Hello list,
>> 
>> Found out yesterday that you can’t extend all existentials in Swift:
>> 
>> protocol P1 {}
>> extension P1 {}
>> // works as expected
>> 
>> protocol P2 {}
>> extension P1 & P2 {}
>> // error: non-nominal type 'P1 & P2' cannot be extended
>> 
>> extension Any {}
>> // error: non-nominal type 'Any' cannot be extended
>> 
>> extension AnyObject {}
>> // error: 'AnyObject' protocol cannot be extended
>> 
>> I’d like to write a proposal to lift some of those restrictions. But the question is: which should be lifted? P1 & P2 seems like an obvious case. But what about Any and AnyObject? Is there a design reason that we shouldn’t allow it?
>> 
>> David.
>> 
>> _______________________________________________
>> 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/20170222/f6064227/attachment.html>


More information about the swift-evolution mailing list