0
我不確定這是否可能,但我想知道是否可以將嵌套的枚舉值轉換爲單個變量,以便它們可以傳入函數參數。例如:將嵌套的枚舉值轉換爲一個變量作爲函數參數傳遞
enum Food {
enum Vegetables: String {
case Spinach = "Spinach"
case GreenBeans = "Green Beans"
}
enum Fruit: String {
case Apples = "Apples"
case Grapes = "Grapes"
}
}
func eat(meal:Food.Vegetables) {
print("I just ate some \(meal.rawValue)")
}
func eat(meal:Food.Fruit) {
print("I just ate some \(meal.rawValue)")
}
eat(Food.Fruit.Apples) //"I just ate some Spinach\n"
eat(Food.Vegetables.Spinach) //"I just ate some Apples\n"
這裏的一切工作,因爲它應該,但我想鞏固我的兩個吃功能到1.有沒有辦法做到這一點?我想它會涉及一個變量,它表示所有可以傳入一個吃飯功能的嵌套變量類型。例如:
func eat(fruitOrVegetable: Food.allNestedEnumeratorTypes) {
print("I just ate some \(fruitOrVegetable.rawValue)")
}
eat(Food.Vegetables.GreenBeans) //"I just ate some Green Beans\n"
eat(Food.Vegetables.Grapes) //"I just ate some Grapes\n"
這可能嗎?
@ vadian的回答是好,你也可以想看看http://stackoverflow.com/questions/35505655/adopting-equatable-protocol-for-enum-with-nested-enum-value S/35506786#35506786。重要的是要明白'蔬菜'和'水果'在這裏沒有任何關係。除了創建一個命名空間外,「食物」完全沒有任何功能。除了名字,如果你擺脫了「食物」,這段代碼將是相同的。在這裏沒有承諾,你碰巧把每個枚舉放在'Food'中都會有'rawValue'屬性。 –
感謝您的回覆。在這種情況下,我完全理解你對食物的含義。我將枚舉器列表嵌套在命名空間中的唯一原因純粹是爲了組織目的,因爲我的應用程序中有許多枚舉列表。 – DJSK