Как определить тип ошибки из объекта ошибки - PullRequest
0 голосов
/ 24 декабря 2018

Условие .failed (let e) из результата возвращает список пользовательских исключений в перечислении SDKError.На стороне пользовательского интерфейса я должен реализовать логику для различных типов сбоев.Как можно определить тип ошибки по объекту?

case .failed (пусть 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)
}

1 Ответ

0 голосов
/ 24 декабря 2018

Вы можете вложить ошибку типа диспетчеризации 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
}
...