Protocol Buffers

在使用 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 用在工程中。

Protocol Buffers_第1张图片
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;
};

上面做了什么:

  1. 定义了 Contact 这个结构,通过这个结构,在 app 中展示相关信息
  2. Contact 被分成不同的类型
  3. messageenum 的域中必须赋值一个递增并且独一无二的标记,
  4. Speakers 中是一个数组,用 repeated 标明

生成 Swift Structs

通过 .protp,能生成 Swift structs, 该结构体提供了,相关的序列化方法。生成相关的类文件

protoc --swift_out=. contact.proto

protoc -I=. --python_out=. ./contact.proto

然后导入相关项目中,就可以使用了

你可能感兴趣的:(Protocol Buffers)