说我有面包店和成分库存:
enum Ingredient {
case flower = 1
case sugar = 2
case yeast = 3
case eggs = 4
case milk = 5
case almonds = 6
case chocolate = 7
case salt = 8
}
Run Code Online (Sandbox Code Playgroud)
案例rawValue代表库存编号.
然后我有两个食谱:
现在我定义一个函数
func bake(with ingredients: [Ingredient]) -> Cake
Run Code Online (Sandbox Code Playgroud)
当然,我相信我的员工,但我仍然想确保他们只使用正确的成分来烘焙蛋糕.
我可以通过定义两个单独的枚举来做到这一点:
enum ChocolateCakeIngredient {
case flower
case sugar
case eggs
case milk
case chocolate
}
enum AlmondCakeIngredient { …Run Code Online (Sandbox Code Playgroud) 我想分享一些枚举属性.就像是:
enum State {
case started
case succeeded
case failed
}
enum ActionState {
include State // what could that be?
case cancelled
}
class Action {
var state: ActionState = .started
func set(state: State) {
self.state = state
}
func cancel() {
self.state = .cancelled
}
}
Run Code Online (Sandbox Code Playgroud)
我明白为什么ActionState不能继承State(因为状态cancelled没有表示State)但我仍然可以说"ActionState就像具有更多选项的State,而ActionState可以获得State类型的输入,因为它们也是输入ActionState"
我看到如何使用上述逻辑来复制案例ActionState并在set函数中进行切换.但我正在寻找一种更好的方法.
我知道枚举不能在Swift中继承,我已经阅读了swift-enum-inheritance的协议答案.它没有解决"继承"或包含来自另一个枚举的案例的需要,而只涉及属性和变量.