swift 命名空间实现的设计思考:extension YKKit where Base ==
设计问题:谁来构造、构造什么、怎么添加新功能 ? 关键词:本体、客体、构造、映射、功能。 别名:桥接变量、型变变量、容器变量、适配变量,构造变量; 目的:添加命名空间、添加新功能。 原则:不修改本体的实现。 ? 原始版本: 在本体的扩展中,直接构造客体;客体的构造器输入参量为主体; 客体为具体类,直接完成本体想要完成的功能; ? 版本升级一:客体泛型化 目的:客体的功能实现脱离 // 客体 public final class YKKit<Base> { ? ? public let base: Base ? ? public init(_ base: Base) { ? ? ? ? self.base = base ? ? } } //构造器 public var yk: YKKit<Self>{ ? ? ? ? get { return YKKit(self) } ? ? } ? 版本升级二:构造器泛型化(构造器功能分离) // 定义泛型协议 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 {} ? 版本升级三:客体协议化 public struct NamespaceWrapper<T>: TypeWrapperProtocol { ? ? public let wrappedValue: T ? ? public init(value: T) { ? ? ? ? self.wrappedValue = value ? ? } } ? public protocol TypeWrapperProtocol { ? ? associatedtype WrappedType ? ? var wrappedValue: WrappedType { get } ? ? init(value: WrappedType) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |