代码之家  ›  专栏  ›  技术社区  ›  J. Doe

确定不带开关的泛型枚举中的参数值[重复]

  •  0
  • J. Doe  · 技术社区  · 6 年前

    public enum Result<T> {
        case succes(data: T), error(resultError: ResultError)
    
        // Is this possible without the switch?
        public var error: ResultError? {
            switch self {
            case .succes(_):
                return nil
            case .error(let resultError):
                return resultError
            }
        }
    }
    
    public enum ResultError: Int {
        case someError = -777
    }
    

    我想知道有没有办法 self 可根据情况有条件地浇铸 error 返回该值,否则返回nil,不使用开关。

    我试着使用守卫声明,但失败了:

    guard let _error = self as? Result.error
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Sweeper    6 年前

    别忘了还有 if case 语句中进行模式匹配 if

    public var error: ResultError? {
        if case .error(let e) = self {
            return e
        } else {
            return nil
        }
    }
    

    使用开关也没什么问题。我认为它非常好,甚至比 if案例