Swiftのenumがすごいんですけど、これも他の言語にあるんでしょうか?

SwiftyJsonからの抜粋なんですが

enum JSONValue {
case JNumber(NSNumber)
case JString(String)
case JBool(Bool)
case JNull
case JArray(Array<JSONValue>)
case JObject(Dictionary<String,JSONValue>)
case JInvalid(NSError)
/*省略*/

みたいに定義できて要素別にいろんなオブジェクトを持たせられられたり

var first: JSONValue? {
switch self {
case .JArray(let jsonArray) where jsonArray.count > 0:
return jsonArray[0]
/*省略*/
}
}

}

switch文のcaseの中にwhere区を入れて条件追加指定できたりとか。
こんなの初めて見ました。