在 Swift 的布尔赋值中使用“if-case”格式?

Sen*_*ful 8 enums swift

如果我定义了以下枚举:

enum CardRank {
  case number(Int)
  case jack
  case queen
  case king
  case ace
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 anif-let来检查它是否是一个数字

let cardRank = CardRank.number(5)
if case .number = cardRank {
  // is a number
} else {
  // something else
}
Run Code Online (Sandbox Code Playgroud)

但是,我想将“这是一个数字”的布尔结果分配给一个变量,而不是使用 if 语句。

例如这样的事情:

let isNumber = (case .number = cardRank)
Run Code Online (Sandbox Code Playgroud)

但是,这给了我编译器错误:

error: expected expression in list of expressions
let isNumber = (case .number = cardRank)
                ^
Run Code Online (Sandbox Code Playgroud)

是否有类似的 1 行语法来使这种分配工作?

我得到的最接近的是这个,但它非常混乱:

let isNumber: Bool = { if case .number = cardRank { return true } else { return false } }()
Run Code Online (Sandbox Code Playgroud)

我知道我可以在 enum 上实现 Equatable 协议,然后执行以下操作:

let isAce = cardRank == .ace
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种不需要遵守 Equatable 协议的解决方案。

Rob*_*ier 6

将其添加为枚举的属性:

extension CardRank { 
    var isNumber: Bool {
        switch self {
        case .number: return true
        default: return false
        }
    }
}

let isNumber = cardRank.isNumber
Run Code Online (Sandbox Code Playgroud)