Soy nuevo en Swift. Tengo más de 2 enumeraciones y me gustaría crear enumeraciones para la función de generador de objetos. No pude encontrar qué tipo debería usar para el parámetro Enum en mi función.
Mis enumeraciones;
public enum Animal: String, CaseIterable { case DOG = "dog" case CAT = "cat" case BIRD = "bird" } public enum Car: String, CaseIterable { case BMW = "bmw" case AUDI = "audi" }mi función;
func enumToObj(Enum:TYPE?) -> Dictionary <String, String> { var enumsObject: [String:String] = [:]; for enumData in Enum.allCases { let value = enumData.rawValue; enumsObject[value] = value; } return enumsObject; } //my expectation enumToObj(Animal) && enumToObj(Car)Puede definir una función genérica que tome como argumento un tipo que sea CaseIterable y RawRepresentable :
func enumToObj<T>(_ Enum:T.Type) -> [String: T.RawValue] where T: CaseIterable & RawRepresentable { var enumsObject: [String: T.RawValue] = [:]; for enumData in Enum.allCases { let value = enumData.rawValue; enumsObject["\(enumData)"] = value; } return enumsObject; } print(enumToObj(Animal.self)) // ["CAT": "cat", "DOG": "dog", "BIRD": "bird"] print(enumToObj(Car.self)) // ["AUDI": "audi", "BMW": "bmw"] Usando reduce(into:_:) esto también se puede escribir como
func enumToObj<T>(_ Enum:T.Type) -> [String: T.RawValue] where T: CaseIterable & RawRepresentable { return Enum.allCases.reduce(into: [:]) { (enumsObject, enumData) in let value = enumData.rawValue; enumsObject["\(enumData)"] = value; } }