美文网首页
Swift实现类似Java/C#的抽象类

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

作者: 游龙飞雪 | 来源:发表于2020-12-25 15:27 被阅读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本类来调用初始化器的话,条件成立,直接崩溃!

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

    相关文章

      网友评论

          本文标题:Swift实现类似Java/C#的抽象类

          本文链接:https://www.haomeiwen.com/subject/kuubnktx.html