是否可以在 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
}
}
}
我敢肯定这是不可能的,通用系统没有我想要的那么强大(例如只能通过协议(protocol)和类继承来限制扩展,而没有可变通用参数)。
最佳答案
类型约束和类型检查是一种编译功能,但您想检查对象的运行时值。
我很确定那是不可能的。您必须使用运行时检查(例如 willSet
或 didSet
)。
或者,不是通过 type
属性的值强制执行类型,而是使用真实类型强制执行它,例如
子类化
class Header: Element
或者使 Element
成为由四个独立类实现的协议(protocol):
protocol Element {
}
class Header: Element
(您可以对共享函数使用协议(protocol)扩展)。
关于ios - Swift 变量约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33807165/