mirror of
https://github.com/valitydev/openapi-generator.git
synced 2024-11-07 02:55:19 +00:00
dd46ba9ef6
Currently, in the swift3 language, if you have an optional integer, number, or boolean property in a model, then the generated swift3 model class might look like: class SomeModel { var someInt: Int? var someFloat: Float? var someDouble: Double? var someBool: Bool? } This works fine if you are accessing this model only from Swift code. However, it is very common for iOS codebases to contain both Swift AND Objective-C. If you need to access this model from Objective-C, then those 4 properties are not accessible, since Optional scalars do not translate to Objective-C. Therefore, in the swift3 language, we want to add some code for Objective-C compatibility: 1. We add a "objCompatible" boolean command-line option. If objCompatible=true, then this enables some additional code generation to make these types of properties accessible from Objective-C. If objCompatible=false, then the generated code is exactly as it currently is. The default is objcCopmatible=false. 2. If objCompatible=true, then for these types of Objective-C-inaccessible properties (Optional scalars), then we add a "x-swift-optional-scalar=true" vendor extension in the CodegenProperty. 3. Then, in the model.mustache template, if we see x-swift-optional-scalar=true, then we add an additional computed property which returns an optional NSNumber. So, for example, when objcCompatible=false (the default case), then the generated code for the "declawed" property of the Cat model looks like: open class Cat: Animal { public var declawed: Bool? ... But when objcCompatible=true, then it looks like: open class Cat: Animal { public var declawed: Bool? public var declawedNum: NSNumber? { get { return declawed.map({ return NSNumber(value: $0) }) } } ...
7 lines
184 B
JSON
7 lines
184 B
JSON
{
|
|
"podSummary": "PetstoreClient",
|
|
"podHomepage": "https://github.com/swagger-api/swagger-codegen",
|
|
"podAuthors": "",
|
|
"projectName": "PetstoreClient",
|
|
"objcCompatible": true
|
|
} |