在Swift中是否有一种标准的方法来生成"纯虚拟函数",即每个子类都可以重写must个函数,如果不是,就会导致编译时错误?

推荐答案

你有两个 Select :

1. Use a Protocol

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

Pro:编译时判断每个"子类"(不是实际的子类)是否实现了所需的方法

Con:"超类"(协议)无法实现方法或属性

2. Assert in the super version of the method

例子:

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

class Subclass : SuperClass {
    override func someFunc() {
    }
}

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

Con:无编译时判断

Swift相关问答推荐

如何根据列表中的项目数量创建多个变量?

自定义完整屏幕封面动画

如何在Swift 中创建移动的uil标签?

启用完成并发判断以及如何解决警告(续)

如何在枚举有关联数据时使用combined if with case

以编程方式使UIView居中,而不影响UIKit中其他UI类的位置

如何写一个;风格;视图修饰符,它会影响特定类型的所有嵌套视图?

为什么变量不存储在 Swift 的过程数据区中

使用View()和List()无法显示影子

在主要参与者中启动分离任务和调用非隔离函数之间的区别

与 SwiftUI 中的 onChange 修饰符相比,objectWillChangeSequence 的目的是什么?

将基于MyProtocol的泛型函数的参数更改为使用存在的any MyProtocol或some MyProtocol是否会受到惩罚?

创建 ViewModel 时 iOS 模拟器上的黑屏

使用 Swiftui 水平修剪 Shape()

如何删除标签和步进按钮之间的间距是 SwiftUI Stepper?

如何使被拖动的对象成为前景(foreground)对象

无法推断泛型参数的参数

在 Swift 中从服务器播放视频文件

如何快速将弹出框调整为表格视图中内容的大小?

迭代 Firebase 中的子快照