美文网首页
swift-命名空间

swift-命名空间

作者: GitArtOS | 来源:发表于2021-06-21 17:47 被阅读0次

1.定义命名空间

1.1 定义公式
/// 类型协议
protocol TypeWrapperProtocol {
    associatedtype WrappedType
    var wrappedValue: WrappedType { get }
    init(value: WrappedType)
}

struct NamespaceWrapper<T>: TypeWrapperProtocol {
    let wrappedValue: T
    init(value: T) {
        self.wrappedValue = value
    }
}

需要什么样的命名空间,就把其中的rx改成你希望的名字。

1.2 具体实例

/// 命名空间协议
protocol NamespaceWrappable {
    associatedtype WrapperType
    var rx: WrapperType { get }
    static var rx: WrapperType.Type { get }
}

extension NamespaceWrappable {
    var rx: NamespaceWrapper<Self> {
        return NamespaceWrapper(value: self)
    }
    static var rx: NamespaceWrapper<Self>.Type {
        return NamespaceWrapper.self
    }
}

2. 使用命名空间

实际上我们需要扩展的类不是需要命名空间的这个类,而是协议

2.1 让需要扩展的类遵循协议NamespaceWrappable;
extension UIColor: NameSpaceWrappable {}
2.2 扩展协议TypeWrapperProtocol
extension TypeWrapperProtocol where WrappedType == UIColor {
    /// 用自身颜色生成UIImage
    var image: UIImage? {
        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()
        context?.setFillColor(wrappedValue.cgColor)
        context?.fill(rect)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        return image
    }
}

在扩展的方法中,self代表的是协议,而不是目标扩展类。那要用到self怎么办?用wrappedValue吧,它就是我们的目标类/实例

相关文章

  • swift-命名空间

    1.定义命名空间 1.1 定义公式 需要什么样的命名空间,就把其中的rx改成你希望的名字。 1.2 具体实例 2....

  • Swift-命名空间,反射机制

    在 Swift 中,由于可以使用命名空间了,即使是名字相同的类型,只要是来自不同的命名空间的话,都是可以和平共处的...

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

    注意点 在对HWExtendedProtocol这个协议做扩展时, where 后面的HWNameSpace约束可...

  • swift-命名空间/反射机制(Reflect)

    Objective-C 一个一直以来令人诟病的地方就是没有命名空间,在应用开发时,所有的代码和引用的静态库最终都会...

  • Hbase 查询语句

    进入HBase数据库 HBase帮助命令: 命名空间 列出所有命名空间 新建命名空间 删除命名空间 该命名空间必须...

  • NDK开发:C++基础

    一、命名空间 standard:标准命名空间 命名空间类似于java中的包。 自定义命名空间 使用命名空间 ::为...

  • Chapter 18 Large-scale project t

    命名空间 inline命名空间 inline声明的命名空间, 可以无视本层命名空间, 而可以被直接使用. 用处: ...

  • C#随笔1

    1命名空间 语法 namespace 命名空间名称{若干个类型} ORnamespace 命名空间名称.子命名...

  • 07_Python函数进阶_全栈开发学习笔记

    # 1. 命名空间 ## 1.1 命名空间的种类 命名空间共有有三种 1) 内置命名空间 —— python解释器...

  • C++入门05 --命名空间,继承,访问权限,初始化列表

    命名空间 命名空间主要是用来解决命名冲突的; namespace xxxx { }:命名空间的定义; 利用::域运...

网友评论

      本文标题:swift-命名空间

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