2016-12-15 46 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枚舉映射爲一個值。

他們分開的原因是因爲我需要稍後對現金目標應用加權。

也許我過了複雜的問題。

但無論如何;

問題>如何查閱字典,其中的關鍵是一個枚舉,而只能得到

回答

2

實際上,你可以設置你的枚舉的原始值,這樣你就沒有價值相匹配的第一個枚舉根本處理那本字典。

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

然後你就可以通過gameLength.rawValue

+0

這是OP代碼,不是我的。他沒有要求樣式提示。 – Bek

+2

@Bek無論如何,朋友們不要讓朋友們在Swift 3中寫Swift 2代碼3 – Alexander

+0

當時的評論屬於OPs post。 – Bek

1

cashGoals訪問了在這裏聲明是沒有字典。它是一個字典數組,每個字母都有一個鍵值。溝內部[],你可以用你的枚舉下標。此外,從大約3開始,公約將使用小寫字母來表示枚舉案例。

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

你也可以只進行枚舉你需要的Int的原始值,但也許你想保持遊戲的長度和現金目標作爲單獨的數據塊,這樣你可以改變的現金目標每個長度..你不能改變枚舉rawValue,但你可以改變結構的變量。

+0

很多謝謝。我覺得我過分的複雜化了我的結果。 – zardon