Is it possible to generate enum from <String> array in Swift?
Here's my listing:
enum myEnum : Int {
case apple = 0
case orange
case lemon
}
I would like to create it from an array. Array elements can be the name of enumerations.
let myEnumDictionary : Array<String> = ["apple","orange","lemon"]
So, is it possible to create enums from an array?
+3
source to share
2 answers
If your enum rawValue
needs to be Int, you can either map from an array of integer raw values ββto a collection of enumerations, or add a convenience initializer that returns an enumeration that matches the given string literal:
enum MyEnum : Int {
case apple = 0
case orange
case lemon
init?(fruit: String) {
switch fruit {
case "apple":
self = .apple
case "orange":
self = .orange
case "lemon":
self = .lemon
default:
return nil
}
}
}
let myEnumDictionary = [0, 1, 2].map{ MyEnum(rawValue: $0) }.flatMap{ $0 }
let myEnumDictionary2 = ["apple", "orange", "lemon"].map{ MyEnum(fruit: $0) }.flatMap{ $0 }
If the enum type rawValue
was a string, you wouldn't need to provide an initializer:
enum MyEnum: String {
case apple
case orange
case lemon
}
let myEnumDictionary = ["apple", "orange", "lemon"].map{ MyEnum(rawValue: $0) }.flatMap{ $0 }
Of course, the easiest way to create an array of enums is to simply provide a list of lists of enums:
let myEnumDictionary: [MyEnum] = [.apple, .orange, .lemon]
0
user4151918
source
to share