swift - 如何从错误对象中识别错误类型

标签 swift exception enums

结果中的 .failed(let e) 条件返回 SDKError 枚举下的自定义异常列表。在 UI 方面,我必须为不同类型的故障实现逻辑。如何从对象中识别错误类型?

case .failed(let e as! SDKError):

case .failed(let e): e.localizedDescription

 // UI side implementation
 SDK.getInstance.fetchItems() { (result) in
    switch result {
    case .success(let item):
        self.item = item
    case .failed(let e):
        print("Error=\(e)")
    }
 }

// SDK part
// Type of response from the closure
public enum ResultModel<T, E> {
    case success(T)
    case failed(E)

    var isSuccess: Bool {
       if case .success(_) = self {
           return true
       }
       return false
    }

    var isFailed: Bool {
       if case .failed(_) = self {
           return true
       }
       return false
    }
}

// SDK part
// Enum class for different exceptions
public enum SDKError: Error {
    case UnacceptableStatusCode(Int)
    case UnexpectedResponse(Any)
    case InvalidAuthCredentials(Any)
    case InvalidData(Any)
    case MandatoryPasswordReset(Any)
    case NullDataFound(Any)
    case NullResponse(Any)
}

最佳答案

您可以将错误类型调度 switch 嵌套在另一个 switch 中,以区分成功和错误状态:

switch result {
case let .failed(error):
  switch error {
  case let SDKError.UnacceptableStatusCode(code): // ...
  // other cases go here
  }
case let .success(value):
  // success handling goes here
}

关于swift - 如何从错误对象中识别错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53913491/

相关文章:

ios - 什么功能可以帮助我了解用户在文本字段中输入的第一个字符以及当我按下键盘返回时如何制作一个空行?

scala序列化总是抛出异常,为什么?

c - 用于指定 C 枚举大小的 GCC/Clang/MSVC 扩展?

powershell - 按索引引用 ENUM

iOS - Swift 中 UITableViewCells 的左右边距

ios - 在切换选项卡之前让 UITabBar 等待用户输入

swift - Sonar 报告包含 0 个错误和漏洞

java - 异常消息如何超越已执行的打印行

python - 尝试自动化浏览器时 Selenium 中的 ElementNotInteractableException

java - 枚举常量中的特殊字符(德语变音符号)