Swift - 获取字典值,其中key是枚举

时间:2016-12-15 19:51:28

标签: swift dictionary enums key-value

我正在写一个快速游戏,想要写一个短期,中期和长期游戏的目标目标列表。这只是现金目标的线性列表。

enum GameLength : Int {
    case ShortGame
    case MediumGame
    case LongGame

    static let allValues = [
        GameLength.ShortGame.rawValue,
        GameLength.MediumGame.rawValue,
        GameLength.LongGame.rawValue,
        ]
}

struct GameGoal {

// I think this should be a set as the game lengths cannot repeat
        var cashGoals = [ [GameLength.ShortGame: 100] ,
                          [GameLength.MediumGame: 200] ,
                          [GameLength.LongGame: 300] ]


    func target(gameLength:GameLength) {
        var result = cashGoals[gameLength].first
        print (result)
    }
}

var gameLength:GameLength = .MediumGame
var gameGoal = GameGoal().target(gameLength)

print (gameGoal)

这里的问题是我现在似乎无法访问给定目标的值。

理想情况下,我想使用值映射gameLength枚举。

之所以分开是因为我需要在以后对现金目标加权。

也许我让问题复杂化了。

但无论如何;

问题>如何访问密钥为枚举的字典,并仅获取与值

匹配的第一个枚举

2 个答案:

答案 0 :(得分:2)

您实际上可以设置枚举的原始值,以便您根本不需要处理该词典。

enum GameLength : Int {
    case ShortGame = 100
    case MediumGame = 200
    case LongGame = 300
}

然后您可以通过gameLength.rawValue

访问它

答案 1 :(得分:1)

此处声明的cashGoals不是字典。它是一个带有一个键的字典数组:每个都有值。抛弃内部[],你可以用你的枚举下标。此外,从swift 3开始,惯例是对枚举案使用小写。

var cashGoals: [GameLength: Int] = [.shortGame: 100 ,
                                    .mediumGame: 200 ,
                                    .longGame: 300 ]
print(cashGoals[.shortGame]) // 100
print(GameLength.shortGame.rawValue) // 0 

您也可以将enum的原始值设为您需要的Int,但也许您希望将游戏长度和现金目标保持为单独的数据,以便您可以改变每个长度的现金目标。你无法改变枚举rawValue,但你可以改变struct的变量。