丰台新乡网站建设,注册有限公司需要什么条件多少钱,抖音小程序赚钱,重庆合川企业网站建设快速上手 iOS Protocol Buffer | 来自缤纷多彩的灰
本文主要介绍在 iOS 开发中如何快速上手使用 Protobuf。更多关于 Protobuf 的介绍和相关的功能 api#xff0c;读者可自行查阅官网。
Protocol Buffer#xff08;简称 Protobuf#xff09;是一种由Google开发的语言中立、…快速上手 iOS Protocol Buffer | 来自缤纷多彩的灰
本文主要介绍在 iOS 开发中如何快速上手使用 Protobuf。更多关于 Protobuf 的介绍和相关的功能 api读者可自行查阅官网。
Protocol Buffer简称 Protobuf是一种由Google开发的语言中立、平台无关的序列化数据结构的方法。它允许你定义结构化的数据并提供一种高效且灵活的方式进行数据序列化和反序列化。
安装 Protobuf 工具
最简单的方式是直接通过 brew 进行安装
brew install protobuf // 支持生成.h和.m文件和其他多种语言的文件
brew install swift-protobuf // 支持生成.swift文件检查是否安装成功 protoc --version protoc-gen-swift --version 创建 .proto 文件 // 使用V3语法 syntax proto3 // OC语言可选添加模型文件前缀 option objc_class_prefix MY // message代表一个模型 message Test { string title 1; int32 tag 2; Request request 3; // 自定义的 Request 类型 repeated string values 4; // 数组 } message Request { string url 1; } OC、Swift 代码生成
Protobuf 提供api用于根据.proto文件生成代码需传入两个参数生成结果与参数的传入顺序无关
.proto 文件的路径下文中用 source_path 表示需要生成的目标语言下文用 target_language 表示以及文件的输出路径下文用 target_path 表示 protoc source_path/xxx.proto --target_language_outtarget_path protoc --objc_out. xxx.proto // 在当前文件夹根据xxx.proto生成.h和.m文件 protoc xxx.proto --swift_out. // 在当前文件夹根据xxx.proto生成.swift文件 在 iOS 工程中的使用
1.工程添加依赖 pod Protobuf // OC和其他多种语言的能力依赖 pod SwiftProtobuf // swift能力依赖 2.把转换后的代码文件加入到工程。
3.跟正常使用某个类的方法一样。
/*{title: test,tag: 1,request: {url: www.fivehow.com},values: [value1, value2]}*/let request Request.with { $0.url www.whlcj.github.io }
// ProtoBuf data
let test Test.with {$0.title test$0.tag 1$0.request request$0.values [value1, value2]
}
let binaryData try? test.serializedData()
guard let binaryData binaryData else { return }
_ try? Test(serializedData: binaryData)
// Json Data
let jsonStr {\title\:\test\, \tag\:1, \request\:{\url\:\www.whlcj.github.io\},\values\:[\value1\, \value2\]}let jsonStrData jsonStr.data(using: .utf8)// 对比 data length
print(binaryData: \(binaryData.count)) // 43guard let jsonStrData jsonStrData else { return }
print(jsonStrData: \(jsonStrData.count)) // 92protobuf 基础类型与Swift类型映射关系 Proto type Swift Type int32Int32sint32Int32sfixed32Int32uint32UInt32fixed32UInt32int64Int64sint64Int64sfixed64Int64uint64UInt64fixed64UInt64boolBoolfloatFloatdoubleDoublestringStringbytesData