相关疑难解决方法(0)

我可以将枚举限制为另一个枚举的某些情况吗?

说我有面包店和成分库存:

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代表库存编号.

然后我有两个食谱:

巧克力蛋糕:

  • 500克花
  • 300克糖
  • 3个鸡蛋
  • 200毫升牛奶
  • 200克巧克力

杏仁蛋糕:

  • 300克花
  • 200克糖
  • 20克酵母
  • 200克杏仁
  • 5个鸡蛋
  • 2克盐

现在我定义一个函数

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)

enums restriction swift

9
推荐指数
1
解决办法
966
查看次数

枚举可以在Swift中包含另一个枚举值吗?

我想分享一些枚举属性.就像是:

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的协议答案.它没有解决"继承"或包含来自另一个枚举的案例的需要,而只涉及属性和变量.

enums swift

9
推荐指数
2
解决办法
4550
查看次数

标签 统计

enums ×2

swift ×2

restriction ×1