在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 {