Estou tentando descobrir uma maneira de recuperar todos os elementos em uma enumeração aninhada de uma matriz. A maneira como construí minha enumeração aninhada da seguinte forma:
enum ItemType: Hashable {
case sword(Swords)
case shield(Shields)
case armor(Armors)
}
enum Swords: String, CaseIterable {
case Sabre = "Sabre"
case Xiphos = "Xiphos"
case Broadsword = "Broadsword"
}
enum Shields: String, CaseIterable {
case Buckler = "Buckler"
case HeaterShield = "Heater Shield"
case KiteShiled = "Kite Shield"
}
enum Armors: String, CaseIterable {
case StudArmor = "Stud Armor"
case Chainmail = "Chainmail"
case PlateArmor = "Plate Armor"
}
Agora eu tenho uma matriz que contém alguns dos elementos da enumeração ItemType:
let loots: [ItemType] = [
.sword(.Xiphos),
.sword(.Broadsword),
.sword(.Sabre),
.armor(.StudArmor),
.armor(.Chainmail),
.shield(.Buckler),
.shield(.HeaterShield)
]
Existe uma maneira de colocar todos os elementos em ItemType.sword em outro array? Estou pensando na linha de: (obviamente não funciona)
let item = loots.first(where: {$0 == ItemType.sword})
Como posso atingir meu objetivo? Ou tenho que reconstruir meus Enums de uma maneira diferente?
Por favor, me avise.
Agradeço antecipadamente.
Você pode adicionar uma propriedade computada ao seu enum
ItemType
para verificar se é uma espada ou não:ou se preferir
if case
ao invés deswitch
:Neles você pode simplesmente pegar o primeiro item onde está isSword ou filtrá-los:
Observe que é convenção de nomenclatura do Swift nomear todos os seus casos de enumeração começando com uma letra minúscula.