#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
и возвращает правильную строку в зависимости от значения enum4. @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 ......")
}
}