Swift类的方法必须由子类重写

有没有一个标准的方法来做一个“纯虚函数”在Swift中,即。 一个必须被每个子类重写,如果不是,会导致编译时错误?

没有任何对抽象类/虚函数的支持,但是大多数情况下你可能使用一个协议:

 protocol SomeProtocol { func someMethod() } class SomeClass: SomeProtocol { func someMethod() {} } 

如果SomeClass不实现someMethod,你会得到这个编译时错误:

 error: type 'SomeClass' does not conform to protocol 'SomeProtocol' 

你有两个select:

1.使用协议

定义超类作为协议而不是类

Pro :编译时检查每个“子类”(而不是实际的子类)是否实现了所需的方法,

Con :“超类”(协议)不能实现方法或属性

2.声明方法的超级版本

例:

 class SuperClass { func someFunc() { fatalError("Must Override") } } class Subclass : SuperClass { override func someFunc() { } } 

Pro :可以在超类中实现方法和属性

Con :没有编译时间检查

另一个解决方法是,如果你没有太多的“虚拟”方法,就是让子类作为函数对象传递“实现”到基类构造函数中:

 class MyVirtual { // 'Implementation' provided by subclass let fooImpl: (() -> String) // Delegates to 'implementation' provided by subclass func foo() -> String { return fooImpl() } init(fooImpl: (() -> String)) { self.fooImpl = fooImpl } } class MyImpl: MyVirtual { // 'Implementation' for super.foo() func myFoo() -> String { return "I am foo" } init() { // pass the 'implementation' to the superclass super.init(myFoo) } }