码迷,mamicode.com
首页 > 其他好文 > 详细

ProtocolBuffers-3 For Objective C (2)-进阶

时间:2016-12-28 12:39:56      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:ack   嵌套   cts   scalar   phone   any   个数   buffers   ring   

1. proto文件写法

syntax = "proto3"; //syntax = “proto3”:表示这是使用protobuf3的语法,不加这句默认使用protobuf2的语言

message Person { // message类似class
string name = 1; // 1 表示这个字段存储的位置
int32 id = 2; // 字段格式:限定符① | 数据类型② | 字段名称③ | = | 字段编码值④ | [字段默认值⑤]
string email = 3;
bytes image = 4; // 定义nsndata
bool isHave = 5;
map<string, string> projects = 6; // 定义字典
repeated string array = 7; // 定义数组
float numFool = 8;
double numDouble = 9;

}
// 限定符: singular,repeated
//singular:一个正确定义的消息包含零或者1个该field.不超过1个
//repeated:可以添加多个,相当于一个数组.排列顺序就是添加时的顺序.protobuf3对scalar数字类型的repeated限定默认都是packed的,这样可以节省很多空间,共用一个key,减少了key的占用.

// 在当前目录便可以看到Test.pbobjc.h和Test.pbobjc.m这两个文件了(需要注意的是生成的代码是MRC的,如果引入ARC工程中记得添加-fno-objc-arc的标签).

 

2.

syntax = "proto3"; //syntax = “proto3”:表示这是使用protobuf3的语法,不加这句默认使用protobuf2的语言

message Person {
string name = 1;
int32 id = 2;
PhoneNumber pp = 3; // // 可以嵌套
PhoneType type = 5; // 可以使用枚举
repeated PhoneNumber phone = 4; //
}

message PhoneNumber {
string number = 1;
PhoneType type = 2 ;
}

enum PhoneType {
//enum类型必须有一个明确是0的字段,这个一是为了和protobuf2兼容,而是使其有个默认值
MOBILE = 0;
HOME = 1;
WORK = 2;
}

 

3.

syntax = "proto3"; //syntax = “proto3”:表示这是使用protobuf3的语法,不加这句默认使用protobuf2的语言

import "google/protobuf/any.proto";

message Person {
string name = 1;
int32 id = 2;
string email = 3;
repeated google.protobuf.Any details = 5; // any任何类型

}

enum EnumAllowingAlias {
option allow_alias = true; // 如果想让不同的枚举指向同一个field
UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;
}

ProtocolBuffers-3 For Objective C (2)-进阶

标签:ack   嵌套   cts   scalar   phone   any   个数   buffers   ring   

原文地址:http://www.cnblogs.com/mcj-coding/p/6228782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!