我正在使用swagger-codegen以 Objective C 语言生成客户端 SDK。我的 API 之一是采用布尔参数。参数在Swagger 规范中定义如下:
"parameters": [
{
"name": "recursive",
"in": "query",
"description": "",
"required": false,
"type": "boolean"
}
]
生成的客户端 SDK 正在检查BOOL
variabe 是否为nil
. BOOL
是 Objective C 中的原始类型,无法检查nil
. 它导致编译错误。
-(NSNumber*) folderDeleteFolderWithCompletionBlock: (NSString*) path recursive: (BOOL) recursive {
...
if(recursive != nil)
{
queryParams[@"recursive"] = recursive;
}
...
}
如果我们使用 NSNumber+ (NSNumber *)numberWithBool:(BOOL)value
代替 BOOL,则可以解决此问题。如何将boolean
swagger 规范映射到NSNumber
客户端 SDK?
我在ObjcClientCodegen.java中做了一些更改,例如替换以下行
typeMapping.put("boolean", "BOOL");
和
typeMapping.put("boolean", "NSNumber");
即使我BOOL
从defaultIncludes
HashSets中languageSpecificPrimitives
删除
defaultIncludes = new HashSet<String>(
Arrays.asList(
/*"bool",
"BOOL",*/
"int",
"NSString",
"NSObject",
"NSArray",
"NSNumber",
"NSDate",
"NSDictionary",
"NSMutableArray",
"NSMutableDictionary")
);
languageSpecificPrimitives = new HashSet<String>(
Arrays.asList(
"NSNumber",
"NSString",
"NSObject",
"NSDate"/*,
"bool",
"BOOL"*/)
);
尽管这个生成的客户端 SDK 使用的是 BOOL 数据类型而不是 NSNumber。
在这方面的任何帮助将不胜感激。