【问题标题】:Compare Nested Enums比较嵌套枚举
【发布时间】:2016-08-03 06:27:43
【问题描述】:

如果我有

var currentState: TransformState = .Default
enum TransformState {
    case Default
    case Error(ErrorState)

    enum ErrorState {
        case Custom
        case Default
    }
}

var state = TransformState.Error(.Custom)

如何检查state == currentState

【问题讨论】:

标签: swift enums


【解决方案1】:

你只需要为TransformState实现Equatable

TransformState.ErrorState 免费获得它,所以你可以在你的实现中使用这个事实:

extension TransformState: Equatable {}
func ==(lhs: TransformState, rhs: TransformState) -> Bool {
    switch (lhs, rhs) {
    case (.Default, .Default):
        return true

    case let (.Error(lhsErrorState), .Error(rhsErrorState)):
        return lhsErrorState == rhsErrorState

    default:
        return false
    }
}

请注意,在 Swift 3.0 中,您可以将运算符重载放在扩展的主体中。

【讨论】:

    【解决方案2】:

    您的问题与 the thread shown by JAL 非常相似,因为您的嵌套枚举 TransformState. ErrorState 是 Equatable。

    你可以写自己的== 喜欢:

    func == (lhs: TransformState, rhs: TransformState) -> Bool {
        switch (lhs, rhs) {
        case (.Default, .Default):
            return true
        case (.Error(let state1), .Error(let state2)):
            return state1 == state2
        default:
            return false
        }
    }
    var currentState: TransformState = .Default
    
    var state = TransformState.Error(.Custom)
    
    print(state == currentState) //->false
    
    currentState = .Error(.Custom)
    print(state == currentState) //->true
    

    【讨论】:

      【解决方案3】:

      为您的枚举覆盖 ==

      func ==(lhs: TransformState, rhs: TransformState) -> Bool {
          switch (lhs, rhs) {
          case (.Default, .Default):
              return true
      
          case (.Error(.Custom), .Error(.Custom)):
              return true
      
          case (.Error(.Default), .Error(.Default)):
              return true
      
          default:
              return false
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 2023-03-09
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多