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 
<[email protected]<mailto:[email protected]>> 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 
<[email protected]<mailto:[email protected]>> 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
[email protected]<mailto:[email protected]>
https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to