提问者:小点点

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


如果我定义了以下枚举:

enum CardRank {
  case number(Int)
  case jack
  case queen
  case king
  case ace
}

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

let cardRank = CardRank.number(5)
if case .number = cardRank {
  // is a number
} else {
  // something else
}

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

例如。像这样的东西:

let isNumber = (case .number = cardRank)

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

error: expected expression in list of expressions
let isNumber = (case .number = cardRank)
                ^

是否有类似的1行语法来让这种赋值工作?

我最接近的是这个,但很混乱:

let isNumber: Bool = { if case .number = cardRank { return true } else { return false } }()

我知道我可以在我的枚举上实现Equable协议,然后执行以下操作:

let isAce = cardRank == .ace

但是我正在寻找一种不需要符合Equable协议的解决方案。


共1个答案

匿名用户

将其作为属性添加到枚举上:

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

let isNumber = cardRank.isNumber