2016-12-15 1 views
1

빠른 게임을 작성 중이며 짧은, 중간 및 긴 게임의 목표 목표 목록을 작성하고 싶습니다. 이것은 현금에 대한 목표의 선형 목록 일뿐입니다.Swift - 키가 enum 인 사전 값 가져 오기

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 코드를 쓰게하지 마십시오. – Alexander

+0

댓글은 OPs 게시물에 있습니다. – Bek

1

cashGoals를 통해 액세스 할 수 있습니다. 하나의 키를 가진 사전들의 배열입니다 : 각각 값. 내부의 []을 버리면 enum으로 아래 첨자를 붙일 수 있습니다. 또한 Swift 3 에서처럼 관례는 열거 형의 경우 소문자를 사용하는 것입니다.

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

또한 단지 열거 당신이 필요로하는 지능의 원시 값을 만들 수있는,하지만 어쩌면 당신은 당신의 현금 목표를 변경할 수 있도록 게임의 길이와 데이터의 별도의 조각으로 현금 목표를 유지하려면 각 길이 .. 열거 형 rawValue 변경할 수 있지만 구조체의 변수를 변경할 수 있습니다.

+0

Many 감사. 어떻게 든 내 결과가 너무 복잡해 졌다고 느꼈다. – zardon

관련 문제