在Swift中有没有一种标准的方法来创建一个“纯虚拟函数”,即。一个是 必须被每个子类覆盖的 ,如果不是这样,会导致编译时错误?
发布于 2014-06-09 06:18:06
您有两个选择:
1.使用协议
将超类定义为协议而不是类
Pro :编译时检查每个“子类”(不是实际的子类)是否实现了所需的方法
Con :“超类”(协议)不能实现方法或属性
2.在方法的超级版本中断言
示例:
class SuperClass { func someFunc() { fatalError("Must Override") class Subclass : SuperClass { override func someFunc() { }
Pro :可以在超类中实现方法和属性
Con :无编译时检查
发布于 2018-07-14 07:19:22
下面的代码允许从类继承,还允许对协议的编译时进行检查:)
protocol ViewControllerProtocol { func setupViews() func setupConstraints() typealias ViewController = ViewControllerClass & ViewControllerProtocol class ViewControllerClass : UIViewController { override func viewDidLoad() { self.setup() func setup() { guard let controller = self as? ViewController else { return controller.setupViews() controller.setupConstraints() //.... and implement methods related to UIViewController at will class SubClass : ViewController { //-- in case these aren't here... an error will be presented func setupViews() { ... } func setupConstraints() { ... } }
发布于 2014-06-09 06:15:39
没有任何对抽象类/虚函数的支持,但是你可以在大多数情况下使用协议:
protocol SomeProtocol {