加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift 命名空间实现的设计思考:extension YKKit where Base ==

发布时间:2020-12-14 05:10:10 所属栏目:百科 来源:网络整理
导读:设计问题:谁来构造、构造什么、怎么添加新功能 ? 关键词:本体、客体、构造、映射、功能。 别名:桥接变量、型变变量、容器变量、适配变量,构造变量; 目的:添加命名空间、添加新功能。 原则:不修改本体的实现。 ? 原始版本: 在本体的扩展中,直接构造

设计问题:谁来构造、构造什么、怎么添加新功能

?

关键词:本体、客体、构造、映射、功能。

别名:桥接变量、型变变量、容器变量、适配变量,构造变量;

目的:添加命名空间、添加新功能。

原则:不修改本体的实现。

?

原始版本:

在本体的扩展中,直接构造客体;客体的构造器输入参量为主体;

客体为具体类,直接完成本体想要完成的功能;

?

版本升级一:客体泛型化

目的:客体的功能实现脱离

// 客体

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)

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读