首页 > 解决方案 > 在 Objective-C 生成的代码中 Protobuf 缺少“列表”后缀

问题描述

我将 protobuf 2.6.1 与我自己编译的这个插件一起使用。

在我正在使用的项目中,Protobuf 模型已经存在。我尝试使用以下命令重新生成文件:

protoc --plugin=/path/to/the/compiled/plugin/objc-gen --objc_out=./gen/ NAME.proto OF.proto THE.proto FILES.proto

通常,这些文件与先前生成的模型非常匹配,但是存在一些语法差异。

以下 .proto 字符串:

repeated MyType case = 4;

在 Obj-C 中被翻译成这一行(新插件,带有 ARC):

@property (readonly, strong) NSArray * case;

而且它曾经带有List后缀(旧插件,非ARC,不适用于当前版本的macOS):

- (NSArray*) caseList;

鉴于这case是 Objective-C 中的关键字,这会触发编译错误。

问题:

  1. 由于什么版本的 Protobuf 更改了语法以省略List后缀?

  2. 是否可以使用新插件触发“旧”行为?

  3. 在 macOS 10.14.3 上运行并能够生成具有旧样式(即带有list 后缀)的文件的最后一个插件版本是什么?

标签: objective-cprotocol-buffersautomatic-ref-countingobjective-c-2.0manual-retain-release

解决方案


推荐阅读