import UIKit
// 1.定义扩展协议
public protocol HWExtendedProtocol {}
// 2.定义一个泛型结构体,使用泛型T
public struct HWNameSpace<T>:HWExtendedProtocol {
public let base: T
init(_ base: T) {
self.base = base
}
}
// 3.扩展协议 (添加hw属性,用于记录调用者的类型)
extension HWExtendedProtocol {
public var hw: HWNameSpace<Self> {
get {
return HWNameSpace(self)
}
set {}
}
}
// 4.想扩展谁 谁就必须遵守HWExtendedProtocol协议(只有遵守了该协议才能调起.hw这个属性)
extension UIView : HWExtendedProtocol {}
// 5.开始扩展如果泛型T是UIView子类都会有此内部方法
extension HWNameSpace where T : UIView {
func log() {
print("调用了打印方法")
}
}
注意点
在对HWExtendedProtocol
这个协议做扩展
时, where 后面的HWNameSpace
约束可以使用==
或者:
两者区别:==
约束:只对本类生效,子类无法使用:
约束:本类子类都可用
调用
self.view.hw.log()
![2685270-600478e55846b403.png](https://upload-images.jianshu.io/upload_images/2685270-600478e55846b403.png)
image.png
转载于:https://www.jianshu.com/p/e1b41d0a214e