第一种实现方式: 原理: 1.泛型类 2.泛型协议 3.协议拓展
// 定义泛型类
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.协议拓展
/// 类型协议
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
复制代码
第三种方式类嵌套:
class Com {
class Test {
}
}
// 使用
let test = Com.Test()
复制代码