You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenAPI Generator Swift5ClientCodegen扩展:Mustache自定义值与属性转义判断

针对OpenAPI Generator Swift5ClientCodegen的自定义模板字段与属性转义判断方案

1. 定义Mustache模板可用自定义值的最优方案

在OpenAPI Generator的架构里,最直接高效的方式是在代码生成逻辑中计算自定义值,并注入到模板渲染的上下文(Context)中,无需依赖复杂的模板端Lambda逻辑。具体操作步骤:

  • 找到Swift5客户端代码生成的核心类(比如Swift5ClientCodegen或它继承的AbstractSwiftCodegen),定位处理模型/数据结构的方法(如processModel、postProcessModels)。
  • 遍历当前model的所有属性集合(allVars),检查是否存在需要转义的属性(判断逻辑对应第二个问题)。
  • 给当前model的上下文对象添加自定义布尔字段(比如hasEscapedPropertyNames),值为是否存在转义属性的判断结果。
  • 完成后就能在Mustache模板中直接用{{#hasEscapedPropertyNames}}...{{/hasEscapedPropertyNames}}做条件渲染。

如果是针对单个属性的自定义标记(比如你示例里的vendorExtensions.x-codegen-escaped-property-name),可以在处理每个属性时,判断该属性是否需要转义,再给属性的上下文添加对应的扩展字段,模板中就能针对单个属性做判断。

2. 判断属性名称是否已被转义

可以从两个维度来判断属性是否需要转义(或已被转义):

维度一:检查是否为Swift保留关键字

OpenAPI Generator的Swift代码生成器内置了保留关键字判断方法isReservedWord(String name)。如果原始属性名是Swift保留字(比如class、enum、struct),生成的属性名会被转义(通常用反引号包裹),这类属性就属于需要标记的转义属性。

维度二:比较格式化后名称与原始名称是否不同

你已经修改了属性名称的格式化逻辑(比如imageUrl→imageURL),可以对比原始属性名(baseName)和经过格式化/ sanitize后的属性名(name):如果两者不一致,说明该属性经过了转义或格式化处理,需要在CodingKeys中添加原始名称的映射。

具体实现的伪代码示例:

// 在属性处理方法中
String originalName = property.getBaseName();
String sanitizedName = sanitizeName(originalName);
if (!sanitizedName.equals(originalName) || isReservedWord(originalName)) {
    // 给属性添加转义标记的vendor扩展
    property.getVendorExtensions().put("x-codegen-escaped-property-name", true);
}

之后在模板里就能用{{#vendorExtensions.x-codegen-escaped-property-name}}判断单个属性是否需要添加映射。

内容的提问来源于stack exchange,提问作者Reimond Hill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 12:08:09