Swift实现类似Java/C#的抽象类

2020-12-25  本文已影响0人  游龙飞雪

抽象类:本身不能被实例化,只能实例化派生类来使用派生类。
例如iOS多线程知识点中的 NSOperation 类,只能使用其三种派生类 ①NSInvocationOperation ②NSBlockOperation ③自定义Operation 。

而swift、oc(iOS开发)中没有修饰符 Abstract 来修饰类和方法,所以只能人为干预来模仿实现。

例如以类名 AbstractClass 为例:
思路就是拒绝用户调用AbstractClass的初始化器 AbstractClass(),或者用户主动调用的话就抛出异常!

如果拒绝用户调用初始化器 AbstractClass(),因为没有对应修饰符来限定,实现不了。所以只能在内部处理,即一旦主动调用 AbstractClass()就抛出异常!

例:
class AbstractClass {
    init() throws {
        if type(of: self) == AbstractClass.self {
            print("AbstractClass init!")
            throw ListError.abstractInitializeError("抽象类不能使用初始化器,请实例化子类!")
        }
    }
}    


class ZhanlangClass : AbstractClass {

    override init() {
            super.init()
            print("ZhanlangClass init!")
    }

}

这样,当使用 AbstractClass 的派生类调用初始化器的时候,由于不满足条件,不会进入if分支抛出异常;当使用AbstractClass本类来调用初始化器的话,条件成立,直接崩溃!

目前想到这种方法,同志们还有什么好的方案欢迎留言!

上一篇下一篇

猜你喜欢

热点阅读