22769

[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があるイメージです。


CC BY-SA 3.0
2016-03-03T10:53:29.197
22763
2016-03-03T15:50:28.677
2016-03-03T11:31:27.583
13404
13404
question
swift
swiftで二重列挙体みたいなものを作りたい


これでできるようです。

[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]


CC BY-SA 3.0
2016-03-03T12:38:32.990
22769
2016-03-03T12:59:24.287
2016-03-03T12:59:24.287
238
238
22763
answer


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

[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]

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


CC BY-SA 3.0
2016-03-03T15:50:28.677
22775
2016-03-03T15:50:28.677
8621
22763
answer