Swift2 Swift 2.0部队协议

Swift2 Swift 2.0部队协议,swift2,Swift2,我想知道是否有一种方法可以在子类化特定类时强制执行协议 例如: protocol MYWindowControllerProtocol { var identifier: String { get } } 然后在后面的中,我创建了NSWindowController的一个子类,以便继承我上面列出的需求: class MYWindowController: NSWindowController, MYWindowControllerProtocol{ } 我的问题是,它需要子类继承协议

我想知道是否有一种方法可以在子类化特定类时强制执行协议

例如:

protocol MYWindowControllerProtocol {
    var identifier: String { get }
}
然后在后面的中,我创建了NSWindowController的一个子类,以便继承我上面列出的需求:

class MYWindowController: NSWindowController, MYWindowControllerProtocol{
}
我的问题是,它需要子类继承协议需要(这是有意义的)。。。有没有办法让“MYWindowController”的子类真正继承需求?没有我的基本
MYWIndowController
类被强制

我想要实现的是:

1) 确保根据协议实现各种功能或VAR需要从
MYWindowController
中派生的任何子类 2) 实际的类MYWindowController(父类
MYWindowController
)并不是强制的,因为它只是一个抽象类

干杯


A

在Swift中,您不能在编译时执行此操作(有些语言具有
抽象类的概念,如Java,您可以在编译时使用它)。您唯一的选择是运行时解决方案。在基类中,可以提供调用fatalError(String)并传递类似“子类必须提供方法/变量的实现”这样的消息的实现。如果没有提供任何实现,这将导致应用程序在运行时失败,因此如果它不是绝对会发生(即,在测试中可能会被忽略),则会有一点风险


注意:我建议您可以使用Swift 2的协议扩展来完成同样的事情,但是当您有一个符合协议且未提供实现的类时,方法调度似乎存在错误,子类实现没有正确调度。

谢谢。。希望情况不是这样,但它似乎是灵活的swift,它不能扩展到这个程度。。。不过还是要感谢……Swift是一种面向协议的语言,因此强制某些东西从其协议中默认将完全打破Swift的观点。这就好比雇一个钢管舞演员来修车(而不是机械师)。。。
var identifier: String {
    get {
        fatalError("Subclass must provide implementation for var identifier")
    }
}