[swift-evolution] [Pre-pitch] Allowing enums inside protocols?

Jonathan Hull jhull at gbis.com
Sat Jul 8 20:59:03 CDT 2017


The idea (at least for me) is to namespace the enum within the protocol, so that users of the protocol have everything neatly packaged.  Right now I have to make a Separate “FoozleErrors” enum, which just feels messy.

I would really like to see us be able to nest Structs, Enums, and even other Protocols within a protocol, and it would just act as a namespace.  Wil is right though, that if we can only have one, Enums give us the most bang for our buck.  That is the case I run into most often.  In addition to Error Enums, I also have a lot of places where protocol functions return a classification (as an enum), and it is cluttering the top-level namespace with things named “Foozle____".

It isn’t a huge issue (it doesn’t stop me from doing anything), but it is an annoyance that I run into all the time…  I view the fact that Swift doesn’t support this as a bug.

Thanks,
Jon


> On Jul 8, 2017, at 6:10 PM, Akshay Hegde <akshay_hegde at me.com> wrote:
> 
> Wouldn’t the following work just as well for providing a namespace?
> 
> struct Foozle {
>     enum Errors: Error {
>         case malformedFoozle
>         case tooManyFoozles
>     }
> }
> 
> ~Akshay
> 
>> On Jul 8, 2017, at 17:24, Jonathan Hull via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>> I *really* want this as well.
>> 
>> I think there was a serious proposal to do this early in Swift 4.  Not sure why it stalled, but I seem to remember it being technically possible.
>> 
>> Thanks,
>> Jon
>> 
>>> On Jul 8, 2017, at 4:21 PM, William Shipley via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>> 
>>> Does anyone know if there's some good tech reason to not allow, like:
>>> 
>>> protocol Foozle {
>>> 	enum Errors: Error {
>>> 		case malformedFoozle
>>> 		case tooManyFoozles
>>> 	}
>>> }
>>> 
>>> Like, to me all this is doing is giving “Errors” a nice namespace, but the compiler might have other thoughts.
>>> 
>>> -W
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto: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/20170708/81cc56d4/attachment.html>


More information about the swift-evolution mailing list