我知道,Swift 不允许在枚举中重新定义案例的访问级别,这意味着以下是不可能的
public enum Foo {
private case Bar
private indirect case Ind(Foo)
public init() {
self = Bar
}
}
谁能告诉我为什么不允许这样做?在某些情况下,隐藏枚举的案例并提供初始化此类案例的初始化程序是切实可行的,因此我真的看不出禁止此功能的动机。
编辑:
考虑以下纯功能树结构的示例:
public enum Tree<T: Comparable> {
case Leaf
indirect case Node(T, Tree, Tree, Int)
public init() {
self = .Leaf
}
public func height() -> Int {
switch self {
case .Leaf:
return 0
case let .Node(_, _, _, h):
return h
}
}
// functions for add and remove, etc.
}
为了更好的运行时间(这在实现自平衡二叉树时是可取的),可能希望将树的高度作为关联值包含在Node
案例中。但这会带来封装问题,因为现在人们可能会构建Node
具有非法高度的案例。如果可以覆盖案例的访问级别,或者如果允许存储在枚举中的常量,则此问题将得到解决。