This should not compile, as you forgot Dragon(s)
You can compute the unique labels:
enum Race: String, CaseIterable {
case Ainur, Balrog, Dragon, Dragons, Dwarf, Dwarves, Eagle, Eagles
var description: String {
switch self {
case .Ainur:
return "Ainur"
case .Balrog:
return "Balrog"
case .Dwarf, .Dwarves:
return "Dwarf"
case .Eagle, .Eagles:
return "Eagles"
case .Dragon, .Dragons: // NEED this case
return "Dragons"
}
}
static var uniqueDescriptions : [String] {
var currentDescriptions : [String] = []
for race in Race.allCases {
if !currentDescriptions.contains(race.description) {
currentDescriptions.append(race.description)
}
}
return currentDescriptions
}
}
print(Race.uniqueDescriptions)
Gives
["Ainur", "Balrog", "Dragons", "Dwarf", "Eagles"]
So Picker code:
Picker("Filter by Race", selection: $raceSelection) {
ForEach (Race.uniqueDescriptions, id: \.self, content: { race in
Text(race.description)
.tag(race.description)
})
}