swiftで二重列挙体みたいなものを作りたい

[code]

    enum Food:Int{
        case Fruit
        case Fish
    }
    
[/code]

このように、一つの列挙体は作成できるのですが、FruitやFishも列挙体にしたい場合はどうすればよいのでしょうか。

使う時のイメージ

[code]

    let apple:String  = Food.Fruit.Apple
    let orange:String = Food.Fruit.Orange
    let saba:String   = Food.Fish.Saba
    
    print(apple.rawValue)  //->りんご 
    print(orange.rawValue) //->おれんじ
    print(saba.rawValue)   //->鯖
    
[/code]

このように、Foodまでは同じですが、FruitやFishで違い、さらにFruitの中でAppleやOrangeがあるイメージです。




これでできるようです。

[code]

    enum Food {
        enum Fish {
            case Saba
        }
    }
    
[/code]

ただし、ネームスペーストして使っているだけなので、Foodでマッチはできないです。結局はstruct版と変わりないと思います。

* * *

以下正確ではありませんでした。

多重のenumは作成できないのではないでしょうか。  
以下のようにstructの中にenumを作るのは思いつきますが。

[code]

    struct Food {
        enum Fish {
            case Saba
        }
    
        enum Fruit {
            case Apple
            case Orange
        }
    }
    
    Food.Fish.Saba
    Food.Fruit.Apple
    Food.Fruit.Orange
    
[/code]




以下コードで一応動きました。

[code]

    enum Food {
        enum Fruit: String {
            case Orange = "みかん"
            case Apple = "りんご"
        }
        enum Fish: String {
            case Saba = "鯖"
        }
    }
    
    let apple  = Food.Fruit.Apple
    let orange = Food.Fruit.Orange
    let saba   = Food.Fish.Saba
    
    print(apple.rawValue)
    print(orange.rawValue)
    print(saba.rawValue)
    
[/code]

「ネストした型」や、「ネストされた型」をキーワードに入れると調べられると思います。

