我正在写一个快速游戏,想要写一个短期,中期和长期游戏的目标目标列表。这只是现金目标的线性列表。
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枚举。
之所以分开是因为我需要在以后对现金目标加权。
也许我让问题复杂化了。
但无论如何;
问题>如何访问密钥为枚举的字典,并仅获取与值
匹配的第一个枚举答案 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的变量。