一.引
在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()
以上~