能否修饰调试中断函数,使其在调用该函数的位置触发中断?
如何在Swift中模拟抽象类行为?
咱都知道Swift本身没有原生的抽象类支持,但如果需要实现那种强制子类重写特定方法的约束,完全可以通过一个简单的辅助函数来模拟抽象类的效果!
先来看核心的mustOverride辅助函数:
func mustOverride(callSite: String = #function) -> Never { preconditionFailure("\(callSite) must be overridden in a subclass") }
这个函数利用#function自动获取当前调用的方法名,再通过preconditionFailure抛出运行时错误,明确提示该方法必须在子类中重写。
接下来看具体的使用示例:
1. 定义“抽象”基类
创建一个基类,把需要子类实现的方法用mustOverride()占位,以此模拟抽象方法:
// 模拟“抽象”类 class SoundBase { func play() { mustOverride() } }
2. 实现具体子类
子类必须重写基类中的play方法,否则调用时会直接触发错误:
// “具体”类 class CatSound : SoundBase { override func play() { // 这里可以实现播放猫叫声的逻辑 print("喵~") } }
如果有人直接实例化SoundBase并调用play方法,程序会立刻崩溃并抛出提示:play() must be overridden in a subclass,完美达到了抽象类的约束效果!
内容的提问来源于stack exchange,提问作者Mark A. Donohoe
相关产品推荐
相关产品推荐

