Swift-(命名空间)实现扩展

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
image.png

Dome

参考:MG --Swift扩展 命名空间

转载于:https://www.jianshu.com/p/e1b41d0a214e

猜你喜欢

转载自blog.csdn.net/weixin_34392843/article/details/91155160
今日推荐