gpt4 book ai didi

Swift 非常长的枚举,有一种不同的情况 : how to deal with that?

转载 作者:行者123 更新时间:2023-11-28 11:42:57 25 4
gpt4 key购买 nike

我尝试用 HTML 颜色制作枚举。一开始我认为它会很好很简单,但我碰壁了。颜色可以定义为名称:moroongraygrey(相同值)或 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 和一些双名称(灰色,灰色)我无法定义原始类型。所以我添加了两个长开关 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" 代替 name。

但现在我不知道如何实现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 不是这个特定问题的最佳主意?

最佳答案

您可以为此使用struct。像这样:

struct HTMLColor: RawRepresentable, Codable {
typealias RawValue = String
var rawValue: String
}

然后您可以在任何您想要的地方添加颜色案例:

extension HTMLColor {
static let aliceblue = HTMLColor(rawValue: "aliceblue")
static let antiquewhite = HTMLColor(rawValue: "antiquewhite")
static let aqua = HTMLColor(rawValue: "aqua")
static let aquamarine = HTMLColor(rawValue: "aquamarine")
static let azure = HTMLColor(rawValue: "azure")

//..... many, many names, and even:

static let customBlack = HTMLColor(rawValue: "#00000000")
}

现在您可以在代码的任何位置使用 HTMLColor.azure 或执行 let custom = HTMLColor(rawValue: "#AB0023FF")

对于 RawRepresentable,默认编码/解码将在/来自 RawValue 类型(此处为 String)。

关于Swift 非常长的枚举,有一种不同的情况 : how to deal with that?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53262899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com