[swift-evolution] Language enhancement: Nest enum declaration into protocol declaration

Jakub Bednář jakub.bednar at avg.com
Mon Nov 21 08:05:28 CST 2016


What I am really missing is tying the enum to that protocol. I would like to write something like WorkingEngine.States.Idle.

In C# you can use namespace to do so, as their interface declarations can’t nest types either.
In C++ you can use either namespace or nest enum inside a virtual class.
In Objective-C and Swift probably the best way is to declare the enum in the same file as the protocol and use the name of the protocol as prefix to the name of the enum.

I thought Swift might improve on this a bit. It is definitely not a functional thing, rather a code-navigation/readability thing.

J.



On Nov 21, 2016, at 2:29 PM, Derrick Ho <wh1pch81n at gmail.com<mailto:wh1pch81n at gmail.com>> wrote:

Actually this is very consistent. You can not nest data structures like enums, structs, or classes in a protocol. This is because a protocol is meant to be a list of variables and functions that data structures may conform to. A protocol is not a data structure.
On Mon, Nov 21, 2016 at 7:33 AM Jakub Bednář via swift-evolution <swift-evolution at swift.org<mailto:swift-evolution at swift.org>> wrote:
Hi fellow Swifters,

I have just started using the language and was trying to declare an enum inside a protocol.

protocol WorkingEngine {
   enum States {
        Idle
        Pending
        Working
        Finished
        Canceled
  }

  var state: States { get }
}

The compiler refused this and I had to take the enum outside of the protocol:

enum WorkingEngineStates {
        Idle
        Pending
        Working
        Finished
        Canceled
  }

protocol WorkingEngine {
  var state: WorkingEngineStates { get }
}

This does not seem coherent with the rest of the language, as enums can be nested in classes, structs and even enums, but not to protocols.
I haven’t found any proposal for this change. Is this the correct place to request it or get some opinion on the idea?

Thanks a lot,

Jakub

_______________________________________________
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/20161121/052db0ba/attachment.html>


More information about the swift-evolution mailing list