所以我在常量(lernset.color)中有这个字符串“绿色”。我想将
.foregroundColor()
设置为列表内的符号(系统名称:“文件夹”),以便它具有与常量内写入的颜色相同的颜色(lernset.color)。
我遇到的问题是:我不知道如何将这个具有字符串数据类型的常量(lernset.color)转换为颜色数据类型。
我已经尝试过:
.foregroundColor(Color.lernset.color)
.foregroundColor(Color.String(lernset.color))
没有任何效果。
[ 所以通常你会输入:
.foregroundColor(Color.green)
但在这种情况下,我希望列表自动适应,以便颜色可以改变常量(lernset.color)变化的方式...
提前感谢您的帮助
如果您想使用字符串,您可以为 Color 添加扩展名:
extension Color {
static subscript(name: String) -> Color {
switch name {
case "green":
return Color.green
case "white":
return Color.white
case "black":
return Color.black
default:
return Color.accentColor
}
}
}
用途:
Color[lernset.color]
使用
Color(lernset.color)
仅当
String
的 lernset.color
值定义为 Color Set
中的
Assets
时才有效
这个
Color.lernset.color
或
Color.green
引用
static
变量。你需要类似的东西
extension Color{
static let yourColor: Color = Color("nameHere")
}
然后就可以打电话
Color.yourColor
“nameHere”是
Color Set
的名字
我本来可以对 Ptit Xav 的帖子发表评论,但我无法发表评论。 所以我用他的解决方案使它工作:
static subscript(name: String) -> Color {
switch name {
case "yellow":
return Color.yellow
case "red":
return Color.red
default:
return Color.white
}
}
然后添加一个跟踪颜色的@State
@State private var color = "red"
并使其发挥作用:
.background(Color[color])