Swift:使用枚举代表扑克牌的等级

问题描述 投票:2回答:1

根据以下规格,我试图做一个枚举来表示纸牌的等级:

排名枚举应仅包含三种情况:.ace.numeric.face.ace代表一个A,.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?

ios swift enums switch-statement case
1个回答
4
投票

由于您没有明确命名关联值,因此您可以使用任何喜欢的名称来提取它。在此示例中,我选择了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
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.