Swift: использование enum для представления ранга игральных карт - PullRequest
2 голосов
/ 02 мая 2020

Я пытаюсь сделать перечисление до express ранга игральных карт, согласно следующим спецификациям:

Перечисление ранга должно иметь только три случая: .ace, .numeric и .face. .ace представляет Ace, .numeric представляет номерную карту, а .face представляет лицевую карту как JQK.

Мы также хотим иметь переменную order, которая возвращает ранг целого числа для печать (например, «Q» вернет 12.

Перечисление выдает следующее:

var a = Rank.ace
var b = Rank.numeric(pipsCount: 7)
var c = Rank.face("Q")
print("\(a.order)") \\prints: 1
print("\(b.order)") \\prints: 7
print("\(c.order)") \\prints: 12

Пока что моя проблема в том, чтобы заставить его напечатать 12 для «Q».

Я использовал:

    case ace
    case numeric(pipsCount: Int)
    case face(String)

Для изготовления чехлов

А потом переключатель для изготовления других вещей

          switch self {
          case .ace:
               return 1
          case .numeric(let pipsCount):
            return pipsCount
          case .face
               return 0
        }

Но я просто не уверен, как настроить care .face, потому что я не уверен, как мне преобразовать входные данные из JQK в 11, 12 и 13 соответственно?

1 Ответ

4 голосов
/ 02 мая 2020

Поскольку вы не указали ассоциированное значение явно, вы можете извлечь его, используя любое имя, которое вам нравится. В этом примере я выбрал id:

enum Rank {
    case ace
    case numeric(pipsCount: Int)
    case face(String)

    var order: Int {
        switch self {
        case .ace:
            return 1
        case .numeric(let pipsCount):
            return pipsCount
        case .face(let id):
            switch id {
            case "J":
                return 11
            case "Q":
                return 12
            case "K":
                return 13
            default:
                return 0
            }
        }
    }
}
...