I'm trying to convert from a string to an enum key value, but I couldn't find any simple method so I hardcoded it, but it still won't work.
I tried using an enum function to return an enum key value from a string, but I can't call it with the string even though I declared it with a String as a parameter.
I then tried to move it to a different class, but the same thing happened.
My relevant code is below.
enum pickedColor: String {
case green = "71D25E"
case red = "FF0000"
case maroon = "800000"
case yellow = "FFFF00"
case olive = "808000"
case lime = "00FF00"
case aqua = "00FFFF"
case teal = "008080"
case blue = "0000FF"
case navy = "000080"
case fuchsia = "FF00FF"
case purple = "800080"
func toEnum(_ colorName: String) -> pickedColor {
if colorName.elementsEqual("green") {
return .green
} else if colorName.elementsEqual("red") {
return .red
} else if colorName.elementsEqual("maroon") {
return .maroon
} else if colorName.elementsEqual("yellow") {
return .yellow
} else if colorName.elementsEqual("olive") {
return .olive
} else if colorName.elementsEqual("lime") {
return .lime
} else if colorName.elementsEqual("aqua") {
return .aqua
} else if colorName.elementsEqual("teal") {
return .teal
} else if colorName.elementsEqual("blue") {
return .blue
} else if colorName.elementsEqual("navy") {
return .navy
} else if colorName.elementsEqual("fuchsia") {
return .fuchsia
} else {
return .purple
}
}
{
The code that shows up when I try to call it is this.Picture1
When manually completed, it still shows an error of cannot convert string to pickedColor.
I then moved the code to a new class, however, it still does not work.
class Color {
func toEnum(_ colorName: String) -> pickedColor {
if colorName.elementsEqual("green") {
return .green
} else if colorName.elementsEqual("red") {
return .red
} else if colorName.elementsEqual("maroon") {
return .maroon
} else if colorName.elementsEqual("yellow") {
return .yellow
} else if colorName.elementsEqual("olive") {
return .olive
} else if colorName.elementsEqual("lime") {
return .lime
} else if colorName.elementsEqual("aqua") {
return .aqua
} else if colorName.elementsEqual("teal") {
return .teal
} else if colorName.elementsEqual("blue") {
return .blue
} else if colorName.elementsEqual("navy") {
return .navy
} else if colorName.elementsEqual("fuchsia") {
return .fuchsia
} else {
return .purple
}
}
}
The second picture of the wrong parameter is here. Picture2
What is going on?
You need to make your toEnum function a static function since you are not calling it on a specific enum instance.
You should also name your enum starting with an uppercase letter.
And a switch is better than your long if/else. I would also consider dealing with an unknown color as well.
enum PickedColor: String {
case green = "71D25E"
case red = "FF0000"
case maroon = "800000"
case yellow = "FFFF00"
case olive = "808000"
case lime = "00FF00"
case aqua = "00FFFF"
case teal = "008080"
case blue = "0000FF"
case navy = "000080"
case fuchsia = "FF00FF"
case purple = "800080"
static func toEnum(_ colorName: String) -> PickedColor? {
switch colorName {
case "green":
return .green
case "red":
return .red
case "maroon":
return .maroon
case "yellow":
return .yellow
case "olive":
return .olive
case "lime":
return .lime
case "aqua":
return .aqua
case "teal":
return .teal
case "blue":
return .blue
case "navy":
return .navy
case "fuchsia":
return .fuchsia
case "purple":
return .purple
default:
return nil
}
}
}
Now you can call it as you tried:
if let color = PickedColor.toEnum(colorName) {
// use color as needed
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With