Я следую дизайну, с которым я столкнулся, который использует Enum для создания сетевого запроса таким образом, который предоставляет элегантный API. По сути, он использует связанные значения для постепенного создания информации (в форме вычисляемых свойств в Enum), которая отправляется в вызов функции Alamofire.
Проблема, с которой я сталкиваюсь, заключается в том, что каждое вычисляемое свойство в Enum фактически требует значения, отличного от связанных значений случаев.
Итак, если я объявлю конечную точку endpoint1(path: String, param1: String)
, свойство path
будет иметь доступ только к первому значению. К сожалению, учитывая то, как работает Swift Enums, кажется, что я должен выставлять все связанные значения для каждого включенного случая. Это приводит к неиспользуемым переменным и, следовательно, должно быть неверным. Поэтому я подумываю отказаться от этого подхода.
Для справки, это мой код, который использует случай Enum для формирования концептуальной конечной точки сети. Который может быть вызван как Endpoint1(path: users/, format: "JSON")
.
public enum Endpoints {
case Endpoint1(path: Sring, param1Value: String)
public var method: HttpMethod {
switch self {
case .Endpoint1,
return HttpMethod.GET
}
}
public var path: String {
switch self {
case .Endpoint1(let path, let paramValue1):
return baseURL + path
}
}
public var parameters: [String : AnyObject] {
var parameters = ["param1" : "..."]
switch self {
case .Endpoint1(let path, let param1Value):
parameters["param1"] = param1Value
break
}
return parameters
}
}
Таким образом, проблема заключается в том, что свойству path
не требуется связанное значение paramValue1
, а свойству parameters
не требуется связанное значение path
.
Несмотря на то, что это немного сложно, мне действительно нравится этот метод использования функций Enum таким образом. К сожалению, этот аспект их функциональности кажется тупиковым. Есть ли способ, которым я мог бы реорганизовать это, чтобы правильно работать со Swift Enums?