Информирование конечного пользователя надлежащим сообщением на основе кода состояния

#swift

#swift

Вопрос:

Я пытаюсь сообщить пользователю пользовательское сообщение следующим образом на основе кода состояния HTTPURLResponse. Однако в следующей реализации у меня возникла проблема с перечислением StatusCode, которое реализовано неправильно, интересно, как исправить эту проблему.

А также мне интересно, как найти лучший подход к этому типу общих проблем?

 enum StatusCode: Int, RawRepresentable {
  case 400 = "It is a bad Request"
  case 401 = "You are unauthorized"
  case 403 = "You are forbidden"
  case 404 = "Your request is not found, please try again"
}


func errorCheck(statusCode:Int){
    if statusCode == StatusCode.400 {
       print(StatusCode.400.rawValue)
    }else if statusCode == StatusCode.404 {
       print(StatusCode.404.rawValue)
    }
}
  

Комментарии:

1. Я не думаю, что идентификаторы могут начинаться с цифры, т. Е. case 400 Не являются синтаксически законными

2. @NewDev Что вы предлагаете для обработки этого типа функций?

3. Вы хотите преобразовать конкретный код ошибки HTTP в строку? Вы могли бы создать вычисляемое свойство description (или что-то еще), которое имеет switch и возвращает правильную строку в зависимости от значения enum

4. @NewDev, не могли бы вы проиллюстрировать свой пример?

5. Наверное, я не совсем понимаю, чего вы пытаетесь достичь… как errorCheck предполагается использовать? Что произойдет, если код состояния не соответствует тому, что определено в перечислении?

Ответ №1:

То, что я думаю, что вы должны сделать, может быть выполнено следующим образом:

 enum StatusCode: Int, RawRepresentable, CustomStringConvertible {
    case e400 = 400
    case e401 = 401
    case e403 = 403
    case e404 = 404
    
    var description: String {
        switch self {
        case .e400: return "It is a bad Request"
        case .e401: return "You are unauthorized"
        case .e403: return "You are forbidden"
        case .e404: return "Your request is not found, please try again"
        }
    }
}
  

Тогда вы могли бы использовать его следующим образом:

 func errorCheck(code: Int){
    if let statusCode = StatusCode(rawValue: code) {
       print(statusCode)
    } else {
       print("An unknown error ......")
    }
}