title: How to require an enum be defined in Swift Protocol
body: <p>Is it possible to have a Protocol require that an enum be defined?</p>
  
  <pre><code>//trying to do this
  protocol JSONEncodable {
      enum PropertyName // Type not allowed here
      func valueForProperty(propertyName:PropertyName) -&gt; Any
  }
  
  //which would be implemented like this
  struct Person : JSONEncodable {
      var firstName : String
      var lastName : String
  
      enum PropertyName {
          case FirstName
          case LastName
          func allValues() {
              return [Person.PropertyName.FirstName, Person.PropertyName.LastName]
          }
          func stringValue() {
              return "\(self)"
          }
      }
      func valueForProperty(propertyName:PropertyName) -&gt; Any {
          switch propertyName {
  
          case .FirstName:
              return firstName
  
          case .LastName:
              return lastName
          }
      }
  }
  
  //so that I could do something like this
  extension JSONEncodable {
  
      func JSONObject() -&gt; [String:AnyObject] {
          var dictionary = [String:AnyObject]()
          for propertyName in PropertyName.allValues {
              let value = valueForProperty(propertyName)
  
              if let valueObject = value as? AnyObject {
                  dictionary[propertyName.stringValue()] = valueObject
  
              }else if let valueObject = value as? JSONEncodable {
                  dictionary[propertyName.stringValue()] = valueObject.JSONObject()
              }
  
          }
          return dictionary
      }
  }
  </code></pre>