将嵌套的枚举值转换为一个变量以作为函数参数传递
Convert nested enumeration values into one variable to be passed as function parameters
我不确定这是否可行,但我想知道是否可以将嵌套枚举值转换为单个变量,以便将它们传递给函数参数。示例:
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"
此处一切正常,但我正在尝试将我的两个 eat 功能合并为 1 个。有没有办法做到这一点?我认为它会涉及一个变量,该变量表示我可以传递给一个 eat 函数的所有嵌套变量类型。类似于:
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"
这可能吗?
您可以使用协议
protocol Vegetarian {
var rawValue : String { get }
}
并将其添加到两个枚举
enum Vegetables: String, Vegetarian { ... }
enum Fruit: String, Vegetarian { ... }
然后你可以声明eat
func eat(meal:Vegetarian) {
print("I just ate some \(meal.rawValue)")
}
eat(Food.Vegetables.GreenBeans) //"I just ate some Green Beans\n"
eat(Food.Fruit.Grapes) //"I just ate some Grapes\n"
我不确定这是否可行,但我想知道是否可以将嵌套枚举值转换为单个变量,以便将它们传递给函数参数。示例:
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"
此处一切正常,但我正在尝试将我的两个 eat 功能合并为 1 个。有没有办法做到这一点?我认为它会涉及一个变量,该变量表示我可以传递给一个 eat 函数的所有嵌套变量类型。类似于:
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"
这可能吗?
您可以使用协议
protocol Vegetarian {
var rawValue : String { get }
}
并将其添加到两个枚举
enum Vegetables: String, Vegetarian { ... }
enum Fruit: String, Vegetarian { ... }
然后你可以声明eat
func eat(meal:Vegetarian) {
print("I just ate some \(meal.rawValue)")
}
eat(Food.Vegetables.GreenBeans) //"I just ate some Green Beans\n"
eat(Food.Fruit.Grapes) //"I just ate some Grapes\n"