在使用 PB (Protocol Buffers)之前,首先要定义一个 *.proto
的文件,如下:
syntax = "proto3";
message Contact {
enum ContactType {
SPEAKER = 0;
ATTENDANT = 1;
VOLUNTEER = 2;
}
string first_name = 1;
string last_name = 2;
string twitter_name = 3;
string email = 4;
string github_link = 5;
ContactType type = 6;
string imageName = 7;
};
通过 protocol buffer compiler,将生成相应语言的的 classes,在 Swift 中生成的是 struct,可以把生成相应的 classes/structs 用在工程中。
image.png优点
- 更快和更小: 根据 Google 对 PB 的介绍,PB 比常用的格式要小 3-10 倍。
- 类型安全: 因为每个属性都明确类型
- 自动反系列化: 无须再写相关序列化代码
- 可以用到多个平台
缺陷
- 要花费时间学习相关 PB 的定义语法
- 可读性差,不像 XML 和 JSON
syntax = "proto3";
message Contact { // 1
enum ContactType { // 2
SPEAKER = 0;
ATTENDANT = 1;
VOLUNTEER = 2;
}
string first_name = 1; //3
string last_name = 2;
string twitter_name = 3;
string email = 4;
string github_link = 5;
ContactType type = 6;
string imageName = 7;
};
message Speakers { // 4
repeated Contact contacts = 1;
};
上面做了什么:
- 定义了 Contact 这个结构,通过这个结构,在 app 中展示相关信息
- Contact 被分成不同的类型
-
message
和enum
的域中必须赋值一个递增并且独一无二的标记, -
Speakers
中是一个数组,用repeated
标明
生成 Swift Structs
通过 .protp
,能生成 Swift structs, 该结构体提供了,相关的序列化方法。生成相关的类文件
protoc --swift_out=. contact.proto
protoc -I=. --python_out=. ./contact.proto
然后导入相关项目中,就可以使用了
网友评论