ios - Swift 变量约束

标签 ios swift generics types

是否可以在 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)和类继承来限制扩展,而没有可变通用参数)。

最佳答案

类型约束和类型检查是一种编译功能,但您想检查对象的运行时值。

我很确定那是不可能的。您必须使用运行时检查(例如 willSetdidSet)。

或者,不是通过 type 属性的值强制执行类型,而是使用真实类型强制执行它,例如

子类化

class Header: Element

或者使 Element 成为由四个独立类实现的协议(protocol):

protocol Element {
}

class Header: Element

(您可以对共享函数使用协议(protocol)扩展)。

关于ios - Swift 变量约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33807165/

相关文章:

ios - 如何在 ARKit 应用程序运行时加载 SCN 或 glTF 模型?

swift - 未在 Swift 类的泛型中指定类型

ios - 检测 NSString 的语言

ios - 扩展的 UITableviewCell 高度不可管理

ios - UIStackView 中的重叠 View

java - 扩展 ArrayList 以支持事件

scala - 重载通用 scala 类中的构造函数

ios - UISlider 跟踪标注未与拇指对齐

html - 以编程方式在网站上输入字符串

swift - 为什么我的弹出窗口延迟了(Swift)?