您的当前位置:首页学习笔记-协议默认实现

学习笔记-协议默认实现

2024-12-14 来源:哗拓教育
一.引

在RxSwift的源码的开始有一段代码

extension ObservableType {
    /// Default implementation of converting `ObservableType` to `Observable`.
    public func asObservable() -> Observable<E> {
        // temporary workaround
        //return Observable.create(subscribe: self.subscribe)
        return Observable.create { o in
            return self.subscribe(o)
        }
    }
}

ObservableType 是协议,使用extention扩展它然后为协议里的方法写了一个默认实现,如果没有其他实现则使用默认实现,方便无比!

二.用法:

只能通过extention扩展一个默认实现,protocol是不允许有方法体的!

Swift里大量使用协议,正是面向对象的三大特性里多态的灵活使用,从OC转Swift,OC里Protocol只能对NSObject使用,而Swift里值类型和引用类型都通用,大大方便了开发。

三.理解:
protocol NomalProtocal {
    func run()
}

class Person: NomalProtocal {
    func run() {
        print("I'm runing now~")
    }
}

上述代码 在OC看来是正常不过了, 一个类实现一个协议,在类里实现协议里的方法,如果不实现,编译器还会提醒你实现。
在开发中会遇到很多类似的类,比如新需求有一个要有一个Animal,它也是会run的,于是你又得实现一遍这个方法,里面的内容如果一致的话,就产生了冗余代码。

protocol NomalProtocal {
    func run()
}

extension NomalProtocal{
    func run() {
        print("I'm runing now~")
    }
}

class Person: NomalProtocal {
    
}

这里添加了一个默认实现,编译通过,没有报错和警告,接着可以直接使用

let person = Person()
person.run()

以上~

显示全文