【发布时间】:2017-04-01 14:55:04
【问题描述】:
我想分享一些枚举属性。比如:
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
}
}
我明白为什么ActionState 不能从State 继承(因为cancelled 状态在State 中没有表示)但我仍然想说“ActionState 就像有更多选项的状态,并且ActionState 可以获取 State 类型的输入,因为它们也是 ActionState 类型”
我知道如何让上述逻辑与复制ActionState 中的案例并在set 函数中进行切换。但我正在寻找更好的方法。
我知道枚举不能在 Swift 中继承,并且我已经阅读了swift-enum-inheritance 的协议答案。它没有解决“继承”或包含来自另一个枚举的案例的需要,而只是属性和变量。
【问题讨论】:
-
阅读一下答案。对于缺乏直接方法,有一个不错的解决方法。
-
不确定。解决方法使用协议使枚举从协议继承属性/函数,但我看不到如何使用它让枚举从另一个枚举继承案例(无论继承在这里)
-
看起来最终答案是否定的。对我来说,这听起来很像是一个需要使用类而不是枚举的明显案例——当你真正需要继承时。
-
我不需要继承和包含一样多,不管那可能是什么。继承实际上没有意义,因为假设这些是类,
cancelled状态在State范围内将没有等效项。换句话说,ActionState并不总是可以表示为State,而恰恰相反(但让State从ActionState继承真的很奇怪)我认为你的观点是,最终答案可能是否定的