zoukankan      html  css  js  c++  java
  • swift 命名空间实现的设计思考:extension YKKit where Base == String

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

     

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

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

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

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

     

    原始版本:

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

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

     

    版本升级一:客体泛型化

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

    // 客体

    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 protocol NamespaceWrappable {
        associatedtype WrapperType
        var hk: WrapperType { get }
        static var hk: WrapperType.Type { get }
    }
    
    public extension NamespaceWrappable {
        var hk: NamespaceWrapper<Self> {
            return NamespaceWrapper(value: self)
        }
    
        static var hk: NamespaceWrapper<Self>.Type {
            return NamespaceWrapper.self
        }
    }
    
    public protocol TypeWrapperProtocol {
        associatedtype WrappedType
        var wrappedValue: WrappedType { get }
        init(value: WrappedType)
    }
    
    public struct NamespaceWrapper<T>: TypeWrapperProtocol {
        public let wrappedValue: T
        public init(value: T) {
            self.wrappedValue = value
        }
    }

    extension String: NamespaceWrappable { }
    extension TypeWrapperProtocol where WrappedType == String {
        var test: String {
            return wrappedValue
        }
    }

  • 相关阅读:
    攻防世界-进阶-1-re4-unvm-me
    攻防世界-reverse-7(game)
    攻防世界-reverse-4.5.6
    20199312 2019-2020-2 《网络攻防实践》第6周作业
    攻防世界-reverse-1.2.3
    pwndbg+kali 爬坑
    第五课 实践验收
    20199315 2019-2020-2 《网络攻防实践》第5周作业
    实践三 网络嗅探与协议分析
    20199315 2019-2020-2 《网络攻防实践》第4周作业
  • 原文地址:https://www.cnblogs.com/feng9exe/p/9924190.html
Copyright © 2011-2022 走看看