mam rozszerzenia przez około 20 teksty stałe, które wyglądają tak:Jak uprościć niemal równe rozszerzeń enum w Swift
extension CurrencyValue : JSONDecodable {
static func create(rawValue: String) -> CurrencyValue {
if let value = CurrencyValue(rawValue: rawValue) {
return value
}
return .unknown
}
static func decode(j: JSONValue) -> CurrencyValue? {
return CurrencyValue.create <^> j.value()
}
}
extension StatusValue : JSONDecodable {
static func create(rawValue: String) -> StatusValue {
if let value = StatusValue(rawValue: rawValue) {
return value
}
return .unknown
}
static func decode(j: JSONValue) -> StatusValue? {
return StatusValue.create <^> j.value()
}
}
Są prawie takie same, z wyjątkiem nazwy typu enum i mam 20 z nich - który jest oczywiście bardzo głupi. Czy ktoś ma pomysł, jak zmniejszyć je do jednego, może używając generycznych? W tej chwili nie mam pojęcia.
UPDATE
Te teksty stałe są tak proste, jak to:
enum CurrencyValue : String {
case EUR = "EUR"
case unknown = "unknown"
}
enum StatusValue : String {
case ok = "ok"
case pending = "pending"
case error = "error"
case unknown = "unknown"
}
i pozwala przyjęto następujące założenia:
- Każdy ENUM ma .unknown sprawę
- muszę wymieniać typ wyliczeniowy w rozszerzeniu na coś ogólnego.
Musi istnieć jakaś sztuczka, aby nie zaimplementować tego samego rozszerzenia wiele razy i po prostu zmienić jego typ na.
UPDATE
Jak y stwierdził Gregory Higley poniżej użyć lib JSON Argo. Możesz przeczytać o tamtejszych operatorach.
Pomocny może być * samodzielny * przykład. –