Я пытаюсь сделать перечисление из HTML-цветов.Сначала я думал, что это будет красиво и просто, но я ударился о стену.Цвета могут быть определены как имя: moroon
, gray
, grey
(то же значение) или строка RGBA #00000000
.Я начал с:
enum HTMLColor {
case aliceblue
case antiquewhite
case aqua
case aquamarine
case azure
//..... many, many names and at the end:
case custom(String)
}
ОК.Из-за последнего custom
и некоторых двойных имен (серый, серый) я не могу определить тип raw.Поэтому я добавил два длинных переключателя name и hexString:
public var name:String {
switch self {
case .aliceblue: return "aliceblue"
case .antiquewhite: return "antiquewhite"
case .aqua: return "aqua"
case .aquamarine: return "aquamarine"
case .azure: return "azure"
//..... many, many names and at the end:
case .custom(let string): return string
}
}
Аналогично hexString - но вместо имени я могу вернуть "#00000000"
.
Но теперь я понятия не имею, как реализоватьinit(from string:String)
или init(from decoder:Decoder)
.Я хотел бы иметь
let azure = HTMLColor(from: "azure")
и получить .azure
или:
let custom = HTMLColor(from: "#AB0023FF")
и получить .hexString(hexValue)
, чтобы использовать их как:
switch color {
case .custom(let string): makeRealColorFromString(string)
default: makeRealColorFromString(color.hexString)
}
Может быть, enum
не самая лучшая идея для этой конкретной проблемы?