From 20e188f2a9b5354908ea7cd40c7f9e789fc4cf4c Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Tue, 13 Jun 2017 17:31:52 +0300 Subject: [PATCH] add memberwise initializer --- Swift/Class.swift.twig | 9 ++++++++- Swift/blocks/class/fields-initialization.twig | 4 ++++ Swift/blocks/class/fields-super-initialization.twig | 4 ++++ Swift/blocks/class/init-parameters-fields.twig | 7 +++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 Swift/blocks/class/fields-initialization.twig create mode 100644 Swift/blocks/class/fields-super-initialization.twig create mode 100644 Swift/blocks/class/init-parameters-fields.twig diff --git a/Swift/Class.swift.twig b/Swift/Class.swift.twig index 503bb31..1cbdc36 100644 --- a/Swift/Class.swift.twig +++ b/Swift/Class.swift.twig @@ -11,7 +11,14 @@ import ObjectMapper {% include 'blocks/class/fields.twig' with { fields: fields } %} {% include 'blocks/class/date-transformers.twig' with { fields: fields } %} - // MARK: - Initializer + // MARK: - Initializers + + {% if (hasParent and (fields is empty)) %} override {% endif %}init({%- include 'blocks/class/init-parameters-fields.twig' with { fields: merge(fields, superclassesFields) } -%}) { + {%- include 'blocks/class/fields-initialization.twig' with { fields: fields } -%} + {% if hasParent %} + super.init({%- include 'blocks/class/fields-super-initialization.twig' with { fields: superclassesFields } -%}) + {%- endif %} + } required init(map: Map) throws { {%- include 'blocks/class/fields-mapping-from-map.twig' with { fields: fields } -%} diff --git a/Swift/blocks/class/fields-initialization.twig b/Swift/blocks/class/fields-initialization.twig new file mode 100644 index 0000000..74ac950 --- /dev/null +++ b/Swift/blocks/class/fields-initialization.twig @@ -0,0 +1,4 @@ +{%- import '../../utils.twig' as utils -%} + {%- for field in fields %} + self.{{ field.name }} = {{ field.name }} +{%- endfor -%} \ No newline at end of file diff --git a/Swift/blocks/class/fields-super-initialization.twig b/Swift/blocks/class/fields-super-initialization.twig new file mode 100644 index 0000000..88b762b --- /dev/null +++ b/Swift/blocks/class/fields-super-initialization.twig @@ -0,0 +1,4 @@ +{%- import '../../utils.twig' as utils -%} + {%- for field in fields -%} + {{ field.name }}: {{ field.name }}{%- if not (loop.last) %}, {% endif %} +{%- endfor -%} \ No newline at end of file diff --git a/Swift/blocks/class/init-parameters-fields.twig b/Swift/blocks/class/init-parameters-fields.twig new file mode 100644 index 0000000..58021cd --- /dev/null +++ b/Swift/blocks/class/init-parameters-fields.twig @@ -0,0 +1,7 @@ +{%- import '../../utils.twig' as utils -%} + +{%- if fields is not empty -%} +{%- for field in fields -%} + {{ field.name }}: {{ utils.formatNullable(utils.formatFieldValueType(field.type.type), field.nullable) }}{%- if not (loop.last) %}, {% endif %} +{%- endfor -%} +{%- endif -%} \ No newline at end of file