Swift建立命名空间

第一种实现方式: 原理: 1.泛型类 2.泛型协议 3.协议拓展bash

// 定义泛型类
public final class YKKit<Base> {
    public let base: Base
    public init(_ base: Base) {
        self.base = base
    }
}

// 定义泛型协议
public protocol YKKitCompatible {
    associatedtype CompatibleType
    var yk: CompatibleType { get }
}

// 协议的扩展 
public extension YKKitCompatible {
    public var yk: YKKit<Self>{
        get { return YKKit(self) }
    }
}

// 实现命名空间yk
extension String: YKKitCompatible {}

// String命名空间yk中的函数
extension YKKit where Base == String {
    // MARK: - Localized

    /// 国际化值
    public var localized: String {
        return NSLocalizedString(base, comment: "")
    }

}

// 使用
let string = "abcd".yk.localized

复制代码

第二种实现方式: 1.类型协议 2.命名空间协议 3.协议拓展app

/// 类型协议
protocol TypeWrapperProtocol {
    associatedtype WrappedType
    var wrappedValue: WrappedType { get }
    init(value: WrappedType)
}

struct NamespaceWrapper<T>: TypeWrapperProtocol {
    let wrappedValue: T
    init(value: T) {
        self.wrappedValue = value
    }
}
复制代码
/// 命名空间协议
protocol NamespaceWrappable {
    associatedtype WrapperType
    var jx: WrapperType { get }
    static var jx: WrapperType.Type { get }
}

extension NamespaceWrappable {
    var jx: NamespaceWrapper<Self> {
        return NamespaceWrapper(value: self)
    }
    static var jx: NamespaceWrapper<Self>.Type {
        return NamespaceWrapper.self
    }
}
复制代码

协议拓展函数

// 遵照命名空间协议
extension UIColor: NamespaceWrappable {}
// 协议拓展
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
    }
}
// 使用
let image = UIColor.blue.jx.image
复制代码

第三种方式类嵌套:ui

class Com {
    class Test {
    }
}
// 使用
let test = Com.Test()
复制代码
相关文章
相关标签/搜索