title: How to define a protocol that contains an enum with values it defines itself and one of them is stored as an attribute?
body: <pre><code>protocol TrackableAction {
  
      var identifier: String { get }
  
  }
  
  struct ServerAction: TrackableAction {
  
      let identifier = "Server"
  
      enum Label: String {
  
          case NotImplemented = "Feature not implemented"
          case NotPlanned = "Feature is not planned in this version"
  
      }
  
     var label: Label
  
  }
  
  struct ClientAction: TrackableAction {
  
      let identifier = "Client"
  
      enum Label: String {
  
          case NoneExisting = "Does not exist"
          case CannotFindRoot = "The root was unknown"
  
      }
  
     var label: Label
  
  }
  </code></pre>
  
  <p>usage:</p>
  
  <pre><code>ServerAction(label: .NotImplemented)
  ClientAction(label: .NoneExisting)
  </code></pre>
  
  <p>Is it possible to extend the TrackableAction to have the duplicated enum and label definition included? </p>
  
  <p>I want this to be able to send objects of that type to a function</p>
  
  <pre><code>func log(trackableAction: TrackableAction) {
      // sends strings to a log service
      print(trackableAction.label) // ERROR
  
  }
  </code></pre>