首页 > 解决方案 > 快速检查错误变量是否不是某些错误的特定情况

问题描述

我有一个错误,我需要检查它是否不是MyError 的特定情况:

enum MyError {
    case one(description: String)
    case two(description: String)
    case three(description: String)
    (...)
}

我可以轻松检查error变量是否是 MyError 的特定情况:

if case MyError.one = error {
    // this is definitely error MyError.one
}

我怎样才能确定它不是一个特定的案例?

if (...) { // something like: !(case MyError.one = error)
    // this is any other case but NOT MyError.one
}

我知道我可以使用guard关键字来做到这一点,或者if-else但我想知道是否有更优雅的解决方案(因为警卫需要 a return):

guard case MyError.one = error else {
    // this is any other case but NOT MyError.one
    return
}

标签: swifterror-handlingenums

解决方案


您还可以在枚举中添加辅助方法:

enum MyError {
    case one(description: String)
    case two(description: String)
    case three(description: String)

    var isOne:Bool {
        if case MyError.one = self {
            return true
        }
        return false
    }
}

不幸的是,目前不可能做任何比这更简单的事情。这里有几个关于这个和相关主题的好帖子:

  1. 如何通过忽略 Swift 中的关联值来比较枚举与关联值?
  2. 如何测试 Swift 枚举与关联值的相等性

推荐阅读