2016-12-15 3 views
1

私はクイックゲームを書いていて、短期、中期および長期のゲームの目標目標のリストを書きたいと思っています。これは現金の目標の線形リストにすぎません。Swift - キーが列挙型である辞書の値を取得する

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列挙型に値をマップしたいと考えています。

なぜ彼らが離れているのかは、後にキャッシュゴールに重み付けを適用する必要があるためです。

おそらく私は問題を複雑にしています。

ただし、

質問>私はキーがenumで、あなただけが持っていないように、あなたが実際にあなたの列挙の生の値を設定することができます

答えて

2

値と一致する最初の列挙を取得し、辞書にアクセスするにはどうすればよいですその辞書にはまったく対処できません。辞書ではありませんここで宣言として

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

次に、あなたはgameLength.rawValue

+0

これは私のものではなく、OPコードです。彼はスタイルのヒントを求めなかった。 – Bek

+2

@ベックスウィフト3で友人はスウィフト2のコードを書くことはできません。 – Alexander

+0

コメントはOPの投稿に属しています。 – Bek

1

cashGoalsを介してアクセスすることができます。 1つのキーを持つディクショナリの配列です。内部[]を捨てて、enumで添え字を付けることができます。また、Swift 3の時点では、enumの場合には小文字を使用することがコンベンションで行われています。

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

また、単にあなたが必要とする列挙型のIntの生の値を作ることができますが、多分あなたは、あなたがのための現金の目標を変えることができるようにデータの別々の部分として、ゲームの長さと現金の目標を維持したいです各長さ..列挙型の値を変更することはできませんでしたが、構造体の変数を変更することができます。

+0

Manyありがとう。私はどのように自分の結果を過度に複雑にしていると感じました。 – zardon

関連する問題