博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再说swift namespace
阅读量:7104 次
发布时间:2019-06-28

本文共 1633 字,大约阅读时间需要 5 分钟。

之前写过namespace的问题不过后续都是没怎么使用,时下rx,snp…大家都应经不再陌生,也是比较常见的,今天我们结合struct 泛型 class一起看个综合的实例 通常我们使用命名空间都是基于一个具体的实例进行的二次封装(大家公认的)而封装的载体通常是struct,然后对struct进行extension 背景: 最经在搞protocol buffer来进行数据压缩,减轻网络流量,于是有了今天的文章

结构定义 在vapor中我们想简单的返回pb数据不是那么简答,因此对返回数据进行了一个包装

1 返回数据格式

public struct PB
: Content where T: Message{ var value: Data init(_ data: T) throws { self.value = try data.serializedData() }}复制代码

2 request

extension Request{   public   func makePB
(value: T) throws -> EventLoopFuture
> where T: Message{ let result = self.eventLoop.newPromise(PB
.self) let pb = try PB.init(value) result.succeed(result: pb) return result.futureResult }}复制代码

有定义看到返回的是个基于Message的泛型struct,我们暂时放置于此,后续使用

namespace包装 1 格式定义

class PBBase
where T: Message{ let base: PB
init(_ base: Base) { self.base = base as! PB
}}复制代码

2 协议定义

protocol PBProtocol {    associatedtype PBType    associatedtype T: Message    var pb:PBType{get}}extension PBProtocol{  public  var pb:PBBase
{ return PBBase.init(self) }}复制代码

完成

extension PB : PBProtocol where T: Message{}复制代码

使用

func testPBBase(){        XCTAssert(pb?.pb.entry != nil, "测试失败")        XCTAssert(pb?.pb.textFormatString() == bookInfo?.textFormatString(), "测试失败")        XCTAssert(pb?.pb.textString == pb?.textString, "测试失败")    }复制代码

我们再来回顾一下整个过程使用了什么 1 使用 where限定了PBProtocol的使用范围

2 protocol中associatedtype的综合使用

2.1 可以定义多个2.2 可以定义一个具体的类型,也可定义个模糊的类型复制代码

3 nameapce的本质是二次封装

转载地址:http://pwuhl.baihongyu.com/

你可能感兴趣的文章
mac os x 查看网络端口情况
查看>>
编写shell脚本处理test文件
查看>>
搭建网络ghost服务器
查看>>
MySQL集群搭建步骤详解
查看>>
什么是活动目录
查看>>
spark install
查看>>
Postgres Hooks
查看>>
如何写好一篇技术博客?
查看>>
SQLserver将一张表a的数据插入另一张表b
查看>>
HTTP状态码详解
查看>>
META元标记详解
查看>>
Linux上Aapache 启动不了,报错信息:suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
查看>>
Ubuntu 16.04 部署自己的私有 Docker Registry
查看>>
python打印详细的异常信息
查看>>
FastDFS+Nginx安装配置笔记
查看>>
Nginx配置文件nginx.conf中文注释
查看>>
20120520 linux下mysql的卸载
查看>>
BIND和DNS名称解析
查看>>
hadoop基本操作命令
查看>>
大型web项目解决方案
查看>>