Skip to content

Commit dc4c8e5

Browse files
committed
[Swift] Force required attrs to be defined with unwrapRequired
Fix #2116 Removal of forced unwrapping, replaced by required attributes in constructor
1 parent 0792ddc commit dc4c8e5

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

modules/swagger-codegen/src/main/resources/swift/Models.mustache

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,22 @@ class Decoders {
137137
// Decoder for {{{classname}}}
138138
Decoders.addDecoder(clazz: {{{classname}}}.self) { (source: AnyObject) -> {{{classname}}} in
139139
let sourceDictionary = source as! [NSObject:AnyObject]
140+
{{#unwrapRequired}}
141+
let instance = {{classname}}({{#requiredVars}}{{^-first}}, {{/-first}}{{#isEnum}}{{name}}: {{classname}}.{{datatypeWithEnum}}(rawValue: (sourceDictionary["{{baseName}}"] as? String) ?? "")! {{/isEnum}}{{^isEnum}}{{name}}: Decoders.decode(clazz: {{{baseType}}}.self, source: sourceDictionary["{{baseName}}"]!){{/isEnum}}{{/requiredVars}})
142+
{{#optionalVars}}
143+
{{#isEnum}}
144+
instance.{{name}} = {{classname}}.{{datatypeWithEnum}}(rawValue: (sourceDictionary["{{baseName}}"] as? String) ?? "")
145+
{{/isEnum}}
146+
{{^isEnum}}
147+
instance.{{name}} = Decoders.decodeOptional(clazz: {{{baseType}}}.self, source: sourceDictionary["{{baseName}}"])
148+
{{/isEnum}}
149+
{{/optionalVars}}
150+
{{/unwrapRequired}}
151+
{{^unwrapRequired}}
140152
let instance = {{classname}}(){{#vars}}{{#isEnum}}
141-
instance.{{name}} = {{classname}}.{{datatypeWithEnum}}(rawValue: (sourceDictionary["{{baseName}}"] as? String) ?? ""){{#unwrapRequired}}{{#required}}!{{/required}}{{/unwrapRequired}} {{/isEnum}}{{^isEnum}}
142-
instance.{{name}} = Decoders.decode{{^unwrapRequired}}Optional{{/unwrapRequired}}{{#unwrapRequired}}{{^required}}Optional{{/required}}{{/unwrapRequired}}(clazz: {{{baseType}}}.self, source: sourceDictionary["{{baseName}}"]{{#unwrapRequired}}{{#required}}!{{/required}}{{/unwrapRequired}}){{/isEnum}}{{/vars}}
153+
instance.{{name}} = {{classname}}.{{datatypeWithEnum}}(rawValue: (sourceDictionary["{{baseName}}"] as? String) ?? "") {{/isEnum}}{{^isEnum}}
154+
instance.{{name}} = Decoders.decodeOptional(clazz: {{{baseType}}}.self, source: sourceDictionary["{{baseName}}"]){{/isEnum}}{{/vars}}
155+
{{/unwrapRequired}}
143156
return instance
144157
}{{/model}}
145158
{{/models}}

modules/swagger-codegen/src/main/resources/swift/model.mustache

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,26 @@ public class {{classname}}: JSONEncodable {
2121
{{#vars}}
2222
{{#isEnum}}
2323
{{#description}}/** {{description}} */
24-
{{/description}}public var {{name}}: {{{datatypeWithEnum}}}{{^unwrapRequired}}?{{/unwrapRequired}}{{#unwrapRequired}}{{^required}}?{{/required}}{{#required}}!{{/required}}{{/unwrapRequired}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}
24+
{{/description}}public var {{name}}: {{{datatypeWithEnum}}}{{^unwrapRequired}}?{{/unwrapRequired}}{{#unwrapRequired}}{{^required}}?{{/required}}{{/unwrapRequired}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}
2525
{{/isEnum}}
2626
{{^isEnum}}
2727
{{#description}}/** {{description}} */
28-
{{/description}}public var {{name}}: {{{datatype}}}{{^unwrapRequired}}?{{/unwrapRequired}}{{#unwrapRequired}}{{^required}}?{{/required}}{{#required}}!{{/required}}{{/unwrapRequired}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}
28+
{{/description}}public var {{name}}: {{{datatype}}}{{^unwrapRequired}}?{{/unwrapRequired}}{{#unwrapRequired}}{{^required}}?{{/required}}{{/unwrapRequired}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}
2929
{{/isEnum}}
3030
{{/vars}}
3131

32+
{{^unwrapRequired}}
3233
public init() {}
34+
{{/unwrapRequired}}
35+
{{#unwrapRequired}}
36+
public init({{#requiredVars}}{{^-first}}, {{/-first}}{{name}}: {{#isEnum}}{{datatypeWithEnum}}!{{/isEnum}}{{^isEnum}}{{datatype}}!{{/isEnum}}{{/requiredVars}}) {
37+
{{#vars}}
38+
{{#requiredVars}}
39+
self.{{name}} = {{name}}
40+
{{/requiredVars}}
41+
{{/vars}}
42+
}
43+
{{/unwrapRequired}}
3344

3445
// MARK: JSONEncodable
3546
func encodeToJSON() -> AnyObject {

0 commit comments

Comments
 (0)