@@ -210,33 +210,54 @@ extension <%= schema_name %> {
210
210
}
211
211
<% when 'INPUT_OBJECT' %>
212
212
open class <%= type . name %> {
213
- <% type . input_fields . each do |field | %>
213
+ <% type . required_input_fields . each do |field | %>
214
214
open var <%= escape_reserved_word ( field . camelize_name ) %> : <%= swift_input_type ( field . type ) %>
215
215
<% end %>
216
+ <% type . optional_input_fields . each do |field | %>
217
+ open var <%= escape_reserved_word ( field . camelize_name ) %> : <%= swift_input_type ( field . type ) %> {
218
+ didSet {
219
+ <%= escape_reserved_word ( field . camelize_name ) %> Seen = true
220
+ }
221
+ }
222
+ private var <%= escape_reserved_word ( field . camelize_name ) %> Seen: Bool = false
223
+ <% end %>
216
224
217
225
public init(
218
- <% input_fields = type . required_input_fields + type . optional_input_fields %>
226
+ <% input_fields = type . required_input_fields + type . optional_input_fields # manually ordered with required fields first %>
219
227
<% input_fields.each do |field| %>
220
- <% default = field . type . non_null? ? "" : " = nil" %>
221
228
<% seperator = field == input_fields.last ? "" : "," %>
222
- <%= escape_reserved_word ( field . camelize_name ) %> : <%= swift_input_type ( field . type ) %> <%= default %> <%= seperator %>
229
+ <% if field.type.non_null? %>
230
+ <%= escape_reserved_word(field.camelize_name) %> : <%= swift_input_type(field.type) %> <%= seperator %>
231
+ <% else %>
232
+ <%= escape_reserved_word(field.camelize_name) %> : <%= swift_input_type(field.type) %> ? = nil<%= seperator %>
233
+ <% end %>
223
234
<% end %>
224
235
) {
225
- <% type . input_fields . each do |field | %>
236
+ <% type.required_input_fields .each do |field| %>
226
237
self.<%= escape_reserved_word(field.camelize_name) %> = <%= escape_reserved_word(field.camelize_name) %>
227
238
<% end %>
239
+ <% type.optional_input_fields.each do |field| %>
240
+ <% field_name = escape_reserved_word(field.camelize_name) %>
241
+ if let <%= field_name %> = <%= field_name %> {
242
+ self.<%= field_name %> Seen = true
243
+ self.<%= field_name %> = <%= field_name %>
244
+ }
245
+ <% end %>
228
246
}
229
247
230
248
func serialize() -> String {
231
249
var fields: [String] = []
232
- <% type . input_fields . each do |field | %>
233
- <% unless field . type . non_null? %>
250
+ <% type.required_input_fields.each do |field| %>
251
+ fields.append("<%= field.name %> :<%= generate_build_input_code(field.camelize_name, field.type.unwrap_non_null) %> ")
252
+ <% end %>
253
+ <% type.optional_input_fields.each do |field| %>
254
+ if <%= escape_reserved_word(field.camelize_name) %> Seen {
234
255
if let <%= escape_reserved_word(field.camelize_name) %> = <%= escape_reserved_word(field.camelize_name) %> {
235
- <% end %>
236
256
fields.append("<%= field.name %> :<%= generate_build_input_code(field.camelize_name, field.type.unwrap_non_null) %> ")
237
- <% unless field . type . non_null? %>
257
+ } else {
258
+ fields.append("<%= field.name %> :null")
238
259
}
239
- <% end %>
260
+ }
240
261
<% end %>
241
262
return "{\(fields.joined(separator: ","))}"
242
263
}
0 commit comments