函数枚举参数类型



我是swift的新手。我有2个以上的枚举,我想创建枚举到对象生成器函数。在函数中找不到应该为Enum参数使用的类型。

我的遗珠;

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"
}

我的功能;

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)

您可以定义一个泛型函数,该函数以类型为参数,即CaseIterableRawRepresentable:

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"]

使用reduce(into:_:),这也可以写成

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;
}
}

最新更新