快速上手 iOS Protocol Buffer

快速上手 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文件生成代码,需传入两个参数,生成结果与参数的传入顺序无关:

  1. .proto 文件的路径(下文中用 source_path 表示)
  2. 需要生成的目标语言 (下文用 target_language 表示)以及文件的输出路径(下文用 target_path 表示)

protoc source_path/xxx.proto --target_language_out=target_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)")            // 43

guard let jsonStrData = jsonStrData else { return }
print("jsonStrData: \(jsonStrData.count)")          // 92

protobuf 基础类型与Swift类型映射关系

Proto type Swift Type
int32 Int32
sint32 Int32
sfixed32 Int32
uint32 UInt32
fixed32 UInt32
int64 Int64
sint64 Int64
sfixed64 Int64
uint64 UInt64
fixed64 UInt64
bool Bool
float Float
double Double
string String
bytes Data
相关推荐
请为小H留灯5 小时前
Mac 常用操作与维护技巧
macos·电脑·清理电脑·常用技巧
zwd200510 小时前
词频是什么?生词滑块 zipf 3.0 到 5.0 怎么调:同一屏从 0 个生词到 11 个
ios·iphone·效率工具·英语学习·词频·屏幕翻译
茶底世界之下13 小时前
灯暖窗冷,色温要不要继续降?用 Awaking 看混合光的取舍
ios
hantmac15 小时前
不记得文件名时,Mac 上的搜索还能怎么做?
人工智能·macos
这是谁的博客?15 小时前
AI 加速器 RTL 数字系统设计深度解析:从 MAC 阵列 Verilog 实现到时序收敛与时钟功耗的芯片落地全链路
人工智能·macos·ai·verilog·数字ic设计·ai芯片·rtl
slacker-kian16 小时前
M 系列 Mac 清除顽固的 CorpLink
macos·corplink·m系列
2501_9160074718 小时前
Windows OpenSSL 生成 iOS 证书,制作 p12 与描述文件,KXBuild 签名实操
windows·vscode·ios·objective-c·个人开发·swift·敏捷流程
最强小杰20 小时前
gpt-image-2.5-sunburst + OpenAI SDK + Cline 怎么接?完整图生图与局部重绘教程
gpt·ios·ai·iphone
kk_net889920 小时前
FSNotes:macOS 和 iOS 上的开源笔记管理器
笔记·其他·macos·ios
00后程序员张21 小时前
Windows 开发 iOS App 入门,用 SwiftUI 写第一个 iOS App 装到 iPhone
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程