ネストされたenumを扱う


ネストされたenumの使い方のサンプルです。
.tokyo(.ebisu)こんな感じで使用することができるので直感的ですね。
他にも良い書き方があれば気軽にコメントお願いします。

enum Japan {
    enum Tokyo: String {
        case shibuya, shinagawa, ebisu
    }
    enum Kanagawa: String {
        case yokohama, kawasaki, sagamihara
    }
    case tokyo(Tokyo)
    case kanagawa(Kanagawa)
}

func sayPlace(_ placeType: Japan) {
    let place: String = {
        switch placeType {
        case .tokyo(let place):    return place.rawValue
        case .kanagawa(let place): return place.rawValue
        }
    }()
    print("\(place)!!!")
}

sayPlace(.tokyo(.ebisu)) // ebisu!!!
sayPlace(.kanagawa(.yokohama)) // yokohama!!!
sayPlace(.kanagawa(.sagamihara)) // sagamihara!!!