@@ -148,26 +148,52 @@ struct ModelMemberPropertyContainer {
148148 return encoder
149149 }
150150
151- func genMemberwiseInit( config: GenConfig ) throws -> DeclSyntax {
151+ func genMemberwiseInit( config: GenConfig ) throws -> [ DeclSyntax ] {
152+ var allHasInitializerExpr = true
152153 let parameters = memberProperties. map { property in
153154 var text = property. name
154155 text += " : " + property. type
155156 if let initializerExpr = property. initializerExpr {
156157 text += " = \( initializerExpr) "
157158 } else if property. isOptional {
158159 text += " = nil "
160+ } else {
161+ allHasInitializerExpr = false
159162 }
160163 return text
161164 }
162165
163166 let overrideInit = config. isOverride ? " super.init() \n " : " "
164167
165- return
166- """
167- \( raw: attributesPrefix ( option: [ . public] ) ) init( \( raw: parameters. joined ( separator: " , " ) ) ) {
168- \( raw: overrideInit) \( raw: memberProperties. map { " self. \( $0. name) = \( $0. name) " } . joined ( separator: " \n " ) )
168+ var inits : [ DeclSyntax ] = [ ]
169+
170+ let initArgs = """
171+ \( raw: attributesPrefix ( option: [ . public] ) ) init( \n \( raw: parameters. joined ( separator: " , \n " ) ) \n ) {
172+ \( raw: overrideInit) \( raw: memberProperties. map { " self. \( $0. name) = \( $0. name) " } . joined ( separator: " \n " ) )
173+ }
174+ """ as DeclSyntax
175+ inits. append ( initArgs)
176+
177+ if allHasInitializerExpr {
178+ let argsInit = memberProperties. map { property in
179+ var text = " self. \( property. name) "
180+ if let initializerExpr = property. initializerExpr {
181+ text += " = \( initializerExpr) "
182+ } else if property. isOptional {
183+ text += " = nil "
184+ }
185+ return text
186+ }
187+
188+ let initDecl = """
189+ \( raw: attributesPrefix ( option: [ . public] ) ) init() {
190+ \( raw: overrideInit) \( raw: argsInit. joined ( separator: " \n " ) )
169191 }
170192 """ as DeclSyntax
193+ inits. append ( initDecl)
194+ }
195+
196+ return inits
171197 }
172198}
173199
0 commit comments