skip to Main Content

So I have this String "green" inside a constant (lernset.color). I would like to set a .foregroundColor() to a symbol (systemName: "folder") inside of a list, so that it has the same color as written inside the constant (lernset.color).
The problem I get: I dont know how to convert this constant (lernset.color) which has the datatype of a String into the datatype of Color.
I already tried:

  1. .foregroundColor(Color.lernset.color)
  2. .foregroundColor(Color.String(lernset.color))
  3. I also tried assigning the constant to a variable… but

nothing worked.

[ So normally you would type: .foregroundColor(Color.green)
But in this case I want the List to automatically adapt, so that the Color could change the way the constant (lernset.color) changes…

Thank you for your help in advance

2

Answers


  1. Use

    Color(lernset.color)
    

    It only works if the String value of lernset.color is defined as a Color Set in Assets

    This

    Color.lernset.color
    

    or

    Color.green
    

    References a static variable. You would need something like

    extension Color{
        static let yourColor: Color = Color("nameHere")
    }
    

    Then you can call

    Color.yourColor
    

    With "nameHere" being the name of a Color Set

    Login or Signup to reply.
  2. If you want to use a string you can add an extension to 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
            }
        }
    }
    

    Usage :

    Color[lernset.color]
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search