在Swift(2.1)的当前迭代中是否可以在变量类型上添加约束?
如果我有课程Element
class Element: NSObject {
var type: ElementType
init(type: ElementType) {
self.type = type
}
}
带有枚举ElementType
的
enum ElementType {
case Cell
case Header
case Footer
case Decoration(kind: String)
}
在其他一些类中如果我有Element
类型的变量,是否可以设置如下的约束:
var element: Element? where Self == .Header
或者我必须覆盖didSet
var element: Element? {
didSet {
if let value = element where value.type == Decoration {
element = Optional.None
}
}
}
我确信这是不可能的,通用系统没有我想要的那么强大(例如,只能通过协议和类继承来约束扩展,并且没有可变参数)。
答案 0 :(得分:2)
类型约束和类型检查是一种编译功能,但您要检查对象的运行时值。
我很确定这是不可能的。您必须使用运行时检查(例如willSet
或didSet
)。
或者,不是按type
属性的值强制执行类型,而是使用实际类型强制执行,例如
子类
class Header: Element
或使Element
由四个单独的类实现的协议:
protocol Element {
}
class Header: Element
(您可以对共享功能使用协议扩展)。