Skip to content

Commit

Permalink
Further improved objc compatibility
Browse files Browse the repository at this point in the history
- Models: Expose non-optional variables to @objc. Otherwise e.g. Int64 is not visible in objc
- Models: Try avoiding generated code that has boolVariable.map ({ return NSNumber(value: $0) }) as map does not exist for Bool in Swift (see Issue OpenAPITools#1456)
- API: Avoid Void? arguments with @objc, as they are not available in objc
  • Loading branch information
Gunther Cronenberg committed Dec 5, 2018
1 parent 6628a2a commit 741e43f
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
Expand Up @@ -40,18 +40,20 @@ extension {{projectName}}API {
- parameter {{paramName}}: ({{#isFormParam}}form{{/isFormParam}}{{#isQueryParam}}query{{/isQueryParam}}{{#isPathParam}}path{{/isPathParam}}{{#isHeaderParam}}header{{/isHeaderParam}}{{#isBodyParam}}body{{/isBodyParam}}) {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}}{{/allParams}}
- parameter completion: completion handler to receive the data and the error objects
*/
{{#objcCompatible}}@objc {{/objcCompatible}}open class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}completion: @escaping ((_ data: {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}?,_ error: Error?) -> Void)) {
{{#objcCompatible}}@objc {{/objcCompatible}}open class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}{{#hasParams}}, {{/hasParams}}completion: @escaping (({{#returnType}}_ data: {{{returnType}}}?,{{/returnType}}{{^returnType}}{{^objcCompatible}}_ data: Void?,{{/objcCompatible}}{{/returnType}}_ error: Error?) -> Void)) {
{{operationId}}WithRequestBuilder({{#allParams}}{{paramName}}: {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}).execute { (response, error) -> Void in
{{#returnType}}
completion(response?.body, error)
{{/returnType}}
{{^returnType}}
{{^returnType}}{{#objcCompatible}}
completion(error)
{{/objcCompatible}}{{^objcCompatible}}
if error == nil {
completion((), error)
} else {
completion(nil, error)
}
{{/returnType}}
{{/objcCompatible}}{{/returnType}}
}
}

Expand Down
Expand Up @@ -13,17 +13,17 @@
{{/isEnum}}
{{^isEnum}}
{{#description}}/** {{description}} */
{{/description}}{{#objcCompatible}}@objc {{/objcCompatible}}public var {{name}}: {{{datatype}}}{{#unwrapRequired}}?{{/unwrapRequired}}{{^unwrapRequired}}{{^required}}?{{/required}}{{/unwrapRequired}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#objcCompatible}}{{#vendorExtensions.x-swift-optional-scalar}}
{{/description}}{{#objcCompatible}}{{#required}}@objc {{/required}}{{^required}}{{^vendorExtensions.x-swift-optional-scalar}}@objc {{/vendorExtensions.x-swift-optional-scalar}}{{/required}}{{/objcCompatible}}public var {{name}}: {{{datatype}}}{{#unwrapRequired}}?{{/unwrapRequired}}{{^unwrapRequired}}{{^required}}?{{/required}}{{/unwrapRequired}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#objcCompatible}}{{#vendorExtensions.x-swift-optional-scalar}}
@objc public var {{name}}Num: NSNumber? {
get {
return {{name}}.map({ return NSNumber(value: $0) })
return {{name}} as NSNumber?
}
}{{/vendorExtensions.x-swift-optional-scalar}}{{/objcCompatible}}
{{/isEnum}}
{{/allVars}}

{{#hasVars}}
{{#objcCompatible}}@objc {{/objcCompatible}}public init({{#allVars}}{{name}}: {{{datatypeWithEnum}}}{{#unwrapRequired}}?{{/unwrapRequired}}{{^unwrapRequired}}{{^required}}?{{/required}}{{/unwrapRequired}}{{#hasMore}}, {{/hasMore}}{{/allVars}}) {
public init({{#allVars}}{{name}}: {{{datatypeWithEnum}}}{{#unwrapRequired}}?{{/unwrapRequired}}{{^unwrapRequired}}{{^required}}?{{/required}}{{/unwrapRequired}}{{#hasMore}}, {{/hasMore}}{{/allVars}}) {
{{#allVars}}
self.{{name}} = {{name}}
{{/allVars}}
Expand Down

0 comments on commit 741e43f

Please sign in to comment.