如何使用字符串将颜色设置为 .foregroundColor()?即“绿色”--> Color.green

问题描述 投票:0回答:3

我在常量(

String
)内有这个
lernset.color
“绿色”。我想将
.foregroundColor()
设置为列表内的符号
(systemName: "folder")
,以便它具有与常量 (
lernset.color
) 内写入的颜色相同的颜色。 我遇到的问题:我不知道如何将这个具有
lernset.color
数据类型的常量 (
String
) 转换为
Color
数据类型。

我已经尝试过:

  1. ...
    .foregroundColor(Color.lernset.color)
  2. ...
    .foregroundColor(Color.String(lernset.color))
  3. 我还尝试将常量分配给变量

但没有任何效果。

通常您会输入:

.foregroundColor(Color.green)
但在这种情况下,我希望
List
自动适应,以便
Color
可以改变常数 (
lernset.color
) 变化的方式。

swift swiftui types
3个回答
4
投票

如果您想使用字符串,您可以为 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]

1
投票

使用

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

的名字

0
投票

我本来可以对 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])
© www.soinside.com 2019 - 2024. All rights reserved.