Я хочу написать обобщенный c метод, который может обращаться к нескольким случаям перечисления, а также к их общим переменным.
enum MyEnum:String,CaseIterable {
case a = "a"
var ourVar:MyAnotherEnum {
switch self {
case .a:
return MyAnotherEnum.a1
}
}
}
enum MyAnotherEnum:String,CaseIterable {
case a1 = "a1"
}
enum YourEnum:String,CaseIterable {
case b = "b"
var ourVar:YourAnotherEnum {
switch self {
case .b:
return YourAnotherEnum.b1
}
}
}
enum YourAnotherEnum:String,CaseIterable {
case b1 = "b1"
}
Мои и Ваши перечисления имеют общий "ourVar". Теперь я хочу написать метод, который может печатать все значения, если я передам перечисление. Примерно так:
printAll(MyEnum.self) //Should print "a" and "a1"
Я пытался повторить перечисление вроде:
func printAll<T>(_ id:T.Type) where T:RawRepresentable, T:CaseIterable {
for c in T.allCases {
print(c.rawValue) //Prints the value correctly
print(c.ourVar) //Throws error "Value of type 'T' has no member 'ourVar'"
}
}
Мое точное ожидание: printAll(myEnum)
должно вывести «a» и «a1».
Мой поток кода сложен для объяснения, но мне определенно нужен этот метод для сохранения тысячи строк. Может ли кто-нибудь помочь мне в этом?