【问题标题】:Using `if-case` format in boolean assignment in Swift?在 Swift 的布尔赋值中使用“if-case”格式?
【发布时间】:2017-09-01 17:16:03
【问题描述】:

如果我定义了以下枚举:

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

我知道I can use an if-let to check if it's a number

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 } }()

我知道我可以implement the Equatable protocol on my enum,然后执行以下操作:

let isAce = cardRank == .ace

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

【问题讨论】:

    标签: swift enums


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 2017-04-08
      • 2013-05-06
      • 2015-12-17
      • 2020-09-17
      相关资源
      最近更新 更多