如果我定义了以下枚举:
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协议的解决方案。
将其作为属性添加到枚举上:
extension CardRank {
var isNumber: Bool {
switch self {
case .number: return true
default: return false
}
}
}
let isNumber = cardRank.isNumber