gpt4 book ai didi

ios - 在结构中获取与另一个关联的值的快捷方式

转载 作者:搜寻专家 更新时间:2023-11-01 07:11:01 27 4
gpt4 key购买 nike

我有一个 CustomColors 结构,其中包含为我的应用定义主要和次要颜色的 static let

struct CustomColors {

static let orangePrimary = UIColor(r: 255, g: 110, b: 64, a: 1)
static let orangeSecondary = UIColor(r: 230, g: 74, b: 25, a: 1)

static let bluePrimary = UIColor(r: 24, g: 255, b: 255, a: 1)
static let blueSecondary = UIColor(r: 18, g: 191, b: 191, a: 1)

static let yellowPrimary = UIColor(r: 255, g: 255, b: 0, a: 1)
static let yellowSecondary = UIColor(r: 255, g: 193, b: 7, a: 1)
}

因为次要颜色完全依赖于主要颜色,所以我正在寻找一种方法来构建数据结构(以最快的方式),让我可以调用例如:CustomColors.bluePrimary.secondary 获取 blueSecondary 颜色。

我觉得我在这里遗漏了一些非常基本的东西,因为我似乎看不出如何以最简单的方式做到这一点。

预先感谢您的帮助!

最佳答案

对颜色使用离散属性不是特别可扩展;您正在处理代码中的特定字符串,这些字符串在运行时很难解析。

我建议您扩展结构以包含颜色对结构和枚举以访问适当的颜色对。由于枚举不符合 hashable,您不能直接将其用作字典键,但我们可以使用字符串原始值来解决这个问题。

类似于:

struct CustomColors {

struct Colors {
let primary: UIColor
let secondary: UIColor
}

enum Theme:String {
case orange
case blue
case yellow
}

private let colors: [String:Colors] = [
Theme.orange.rawValue: Colors(primary: UIColor(r: 255, g: 110, b: 64, a: 1),secondary: UIColor(r: 230, g: 74, b: 25, a: 1)),
Theme.blue.rawValue: Colors(primary:UIColor(r: 24, g: 255, b: 255, a: 1), secondary:UIColor(r: 24, g: 255, b: 255, a: 1)),
Theme.yellow.rawValue: Colors(primary: UIColor(r: 255, g: 255, b: 0, a: 1), secondary: UIColor(r: 255, g: 193, b: 7, a: 1))

]

func colorFor(theme: Theme) -> Colors {
return colors[theme.rawValue]!
}

}

例如,现在您可以跟踪当前事件的主题并使用变量来访问颜色。一旦你有了 Colors 结构,只需访问 primarysecondary 属性

let cc = CustomColors()
let activeTheme: CustomColors.Theme = .blue
print(cc.colorFor(theme: activeTheme).primary)

您还可以使用原始值轻松识别和创建Theme

print(activeTheme)
if let someOtherTheme = CustomColors.Theme(rawValue: "yellow") {
print(someOtherTheme)
}

关于ios - 在结构中获取与另一个关联的值的快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44919269/

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