Skip to content

Commit a5e4abe

Browse files
Daiki Matsudatewing328
Daiki Matsudate
authored andcommitted
[Swift4]Update templates for swift 4 (swagger-api#6921)
* update versions of dependencies on swift4 and swift3 * change syntax for swift4 * run petstore script * change enum case from UpperCamel to lowerCamel * remove unneeded break statements * avoid wrapping conditionals in parentheses * avoid force casting * run pod update on petstore/swift4/rxswift * update project for swift 4 * run swift4-petstore-all.sh * fix compile error * avoid use iso8601 date strategy for encoder / decoder * resolve file references
1 parent b06ccec commit a5e4abe

File tree

379 files changed

+5117
-8072
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

379 files changed

+5117
-8072
lines changed

.java-version

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
oracle64-1.8.0.152

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

+7-7
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class AlamofireRequestBuilder<T>: RequestBuilder<T> {
8888
}
8989
self.processRequest(uploadRequest, managerId, completion)
9090
case .Failure(let encodingError):
91-
completion(response: nil, error: ErrorResponse.Error(415, nil, encodingError))
91+
completion(response: nil, error: ErrorResponse.error(415, nil, encodingError))
9292
}
9393
}
9494
)
@@ -121,7 +121,7 @@ class AlamofireRequestBuilder<T>: RequestBuilder<T> {
121121
if stringResponse.result.isFailure {
122122
completion(
123123
response: nil,
124-
error: ErrorResponse.Error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.result.error!)
124+
error: ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.result.error!)
125125
)
126126
return
127127
}
@@ -141,7 +141,7 @@ class AlamofireRequestBuilder<T>: RequestBuilder<T> {
141141
if voidResponse.result.isFailure {
142142
completion(
143143
response: nil,
144-
error: ErrorResponse.Error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.result.error!)
144+
error: ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.result.error!)
145145
)
146146
return
147147
}
@@ -158,10 +158,10 @@ class AlamofireRequestBuilder<T>: RequestBuilder<T> {
158158
validatedRequest.responseData(completionHandler: { (dataResponse) in
159159
cleanupRequest()
160160
161-
if (dataResponse.result.isFailure) {
161+
if dataResponse.result.isFailure {
162162
completion(
163163
response: nil,
164-
error: ErrorResponse.Error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!)
164+
error: ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!)
165165
)
166166
return
167167
}
@@ -179,7 +179,7 @@ class AlamofireRequestBuilder<T>: RequestBuilder<T> {
179179
cleanupRequest()
180180
181181
if response.result.isFailure {
182-
completion(response: nil, error: ErrorResponse.Error(response.response?.statusCode ?? 500, response.data, response.result.error!))
182+
completion(response: nil, error: ErrorResponse.error(response.response?.statusCode ?? 500, response.data, response.result.error!))
183183
return
184184
}
185185

@@ -198,7 +198,7 @@ class AlamofireRequestBuilder<T>: RequestBuilder<T> {
198198
return
199199
}
200200
201-
completion(response: nil, error: ErrorResponse.Error(500, nil, NSError(domain: "localhost", code: 500, userInfo: ["reason": "unreacheable code"])))
201+
completion(response: nil, error: ErrorResponse.error(500, nil, NSError(domain: "localhost", code: 500, userInfo: ["reason": "unreacheable code"])))
202202
}
203203
}
204204
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public class Response<T> {
2828
public convenience init(response: NSHTTPURLResponse, body: T?) {
2929
let rawHeader = response.allHeaderFields
3030
var header = [String:String]()
31-
for (key, value) in rawHeader {
32-
header[key as! String] = value as? String
31+
for case let (key, value) as (String, String) in rawHeader {
32+
header[key] = value
3333
}
3434
self.init(statusCode: response.statusCode, header: header, body: body)
3535
}

modules/swagger-codegen/src/main/resources/swift3/AlamofireImplementations.mustache

+1-5
Original file line numberDiff line numberDiff line change
@@ -118,16 +118,12 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
118118
else {
119119
mpForm.append(fileURL, withName: k)
120120
}
121-
break
122121
case let string as String:
123122
mpForm.append(string.data(using: String.Encoding.utf8)!, withName: k)
124-
break
125123
case let number as NSNumber:
126124
mpForm.append(number.stringValue.data(using: String.Encoding.utf8)!, withName: k)
127-
break
128125
default:
129126
fatalError("Unprocessable value \(v) with key \(k)")
130-
break
131127
}
132128
}
133129
}, to: URLString, method: xMethod!, headers: nil, encodingCompletion: { encodingResult in
@@ -206,7 +202,7 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
206202
validatedRequest.responseData(completionHandler: { (dataResponse) in
207203
cleanupRequest()
208204
209-
if (dataResponse.result.isFailure) {
205+
if dataResponse.result.isFailure {
210206
completion(
211207
nil,
212208
ErrorResponse.HttpError(statusCode: dataResponse.response?.statusCode ?? 500, data: dataResponse.data, error: dataResponse.result.error!)
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
github "Alamofire/Alamofire" >= 3.1.0{{#usePromiseKit}}
2-
github "mxcl/PromiseKit" >=1.5.3{{/usePromiseKit}}{{#useRxSwift}}
3-
github "ReactiveX/RxSwift" ~> 2.0{{/useRxSwift}}
1+
github "Alamofire/Alamofire" ~> 4.5{{#usePromiseKit}}
2+
github "mxcl/PromiseKit" ~> 4.4{{/usePromiseKit}}{{#useRxSwift}}
3+
github "ReactiveX/RxSwift" "rxswift-3.0"{{/useRxSwift}}

modules/swagger-codegen/src/main/resources/swift3/Extensions.mustache

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ extension Dictionary: JSONEncodable {
5454
func encodeToJSON() -> Any {
5555
var dictionary = [AnyHashable: Any]()
5656
for (key, value) in self {
57-
dictionary[key as! NSObject] = encodeIfPossible(value)
57+
dictionary[key] = encodeIfPossible(value)
5858
}
5959
return dictionary as Any
6060
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ open class Response<T> {
2929
public convenience init(response: HTTPURLResponse, body: T?) {
3030
let rawHeader = response.allHeaderFields
3131
var header = [String:String]()
32-
for (key, value) in rawHeader {
33-
header[key as! String] = value as? String
32+
for case let (key, value) as (String, String) in rawHeader {
33+
header[key] = value
3434
}
3535
self.init(statusCode: response.statusCode, header: header, body: body)
3636
}

modules/swagger-codegen/src/main/resources/swift3/Podspec.mustache

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ Pod::Spec.new do |s|
1616
s.documentation_url = '{{podDocumentationURL}}'{{/podDocumentationURL}}
1717
s.source_files = '{{projectName}}/Classes/**/*.swift'{{#usePromiseKit}}
1818
s.dependency 'PromiseKit/CorePromise', '~> 4.4.0'{{/usePromiseKit}}{{#useRxSwift}}
19-
s.dependency 'RxSwift', '~> 3.4.1'{{/useRxSwift}}
19+
s.dependency 'RxSwift', '3.6.1'{{/useRxSwift}}
2020
s.dependency 'Alamofire', '~> 4.5.0'
2121
end

modules/swagger-codegen/src/main/resources/swift4/AlamofireImplementations.mustache

+14-18
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,12 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
7777
else {
7878
mpForm.append(fileURL, withName: k)
7979
}
80-
break
8180
case let string as String:
8281
mpForm.append(string.data(using: String.Encoding.utf8)!, withName: k)
83-
break
8482
case let number as NSNumber:
8583
mpForm.append(number.stringValue.data(using: String.Encoding.utf8)!, withName: k)
86-
break
8784
default:
8885
fatalError("Unprocessable value \(v) with key \(k)")
89-
break
9086
}
9187
}
9288
}, to: URLString, method: xMethod!, headers: nil, encodingCompletion: { encodingResult in
@@ -97,7 +93,7 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
9793
}
9894
self.processRequest(request: upload, managerId, completion)
9995
case .failure(let encodingError):
100-
completion(nil, ErrorResponse.Error(415, nil, encodingError))
96+
completion(nil, ErrorResponse.error(415, nil, encodingError))
10197
}
10298
})
10399
} else {
@@ -129,7 +125,7 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
129125
if stringResponse.result.isFailure {
130126
completion(
131127
nil,
132-
ErrorResponse.Error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.result.error as Error!)
128+
ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.result.error as Error!)
133129
)
134130
return
135131
}
@@ -186,9 +182,9 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
186182
)
187183

188184
} catch let requestParserError as DownloadException {
189-
completion(nil, ErrorResponse.Error(400, dataResponse.data, requestParserError))
185+
completion(nil, ErrorResponse.error(400, dataResponse.data, requestParserError))
190186
} catch let error {
191-
completion(nil, ErrorResponse.Error(400, dataResponse.data, error))
187+
completion(nil, ErrorResponse.error(400, dataResponse.data, error))
192188
}
193189
return
194190
})
@@ -199,7 +195,7 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
199195
if voidResponse.result.isFailure {
200196
completion(
201197
nil,
202-
ErrorResponse.Error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.result.error!)
198+
ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.result.error!)
203199
)
204200
return
205201
}
@@ -215,10 +211,10 @@ open class AlamofireRequestBuilder<T>: RequestBuilder<T> {
215211
validatedRequest.responseData(completionHandler: { (dataResponse) in
216212
cleanupRequest()
217213
218-
if (dataResponse.result.isFailure) {
214+
if dataResponse.result.isFailure {
219215
completion(
220216
nil,
221-
ErrorResponse.Error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!)
217+
ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!)
222218
)
223219
return
224220
}
@@ -331,7 +327,7 @@ open class AlamofireDecodableRequestBuilder<T:Decodable>: AlamofireRequestBuilde
331327
if stringResponse.result.isFailure {
332328
completion(
333329
nil,
334-
ErrorResponse.Error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.result.error as Error!)
330+
ErrorResponse.error(stringResponse.response?.statusCode ?? 500, stringResponse.data, stringResponse.result.error as Error!)
335331
)
336332
return
337333
}
@@ -351,7 +347,7 @@ open class AlamofireDecodableRequestBuilder<T:Decodable>: AlamofireRequestBuilde
351347
if voidResponse.result.isFailure {
352348
completion(
353349
nil,
354-
ErrorResponse.Error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.result.error!)
350+
ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.result.error!)
355351
)
356352
return
357353
}
@@ -367,10 +363,10 @@ open class AlamofireDecodableRequestBuilder<T:Decodable>: AlamofireRequestBuilde
367363
validatedRequest.responseData(completionHandler: { (dataResponse) in
368364
cleanupRequest()
369365
370-
if (dataResponse.result.isFailure) {
366+
if dataResponse.result.isFailure {
371367
completion(
372368
nil,
373-
ErrorResponse.Error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!)
369+
ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!)
374370
)
375371
return
376372
}
@@ -388,17 +384,17 @@ open class AlamofireDecodableRequestBuilder<T:Decodable>: AlamofireRequestBuilde
388384
cleanupRequest()
389385
390386
guard dataResponse.result.isSuccess else {
391-
completion(nil, ErrorResponse.Error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!))
387+
completion(nil, ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.result.error!))
392388
return
393389
}
394390

395391
guard let data = dataResponse.data, !data.isEmpty else {
396-
completion(nil, ErrorResponse.Error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
392+
completion(nil, ErrorResponse.error(-1, nil, AlamofireDecodableRequestBuilderError.emptyDataResponse))
397393
return
398394
}
399395

400396
guard let httpResponse = dataResponse.response else {
401-
completion(nil, ErrorResponse.Error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
397+
completion(nil, ErrorResponse.error(-2, nil, AlamofireDecodableRequestBuilderError.nilHTTPResponse))
402398
return
403399
}
404400

Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
github "Alamofire/Alamofire" >= 3.1.0{{#usePromiseKit}}
2-
github "mxcl/PromiseKit" >=1.5.3{{/usePromiseKit}}{{#useRxSwift}}
3-
github "ReactiveX/RxSwift" ~> 2.0{{/useRxSwift}}
1+
github "Alamofire/Alamofire" ~> 4.5.0{{#usePromiseKit}}
2+
github "mxcl/PromiseKit" ~> 4.4{{/usePromiseKit}}{{#useRxSwift}}
3+
github "ReactiveX/RxSwift" ~> 4.0{{/useRxSwift}}

modules/swagger-codegen/src/main/resources/swift4/CodableHelper.mustache

+12-6
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@ open class CodableHelper {
2222
decoder.dateDecodingStrategy = .formatted(df)
2323
} else {
2424
decoder.dataDecodingStrategy = .base64
25-
if #available(iOS 10.0, *) {
26-
decoder.dateDecodingStrategy = .iso8601
27-
}
25+
let formatter = DateFormatter()
26+
formatter.calendar = Calendar(identifier: .iso8601)
27+
formatter.locale = Locale(identifier: "en_US_POSIX")
28+
formatter.timeZone = TimeZone(secondsFromGMT: 0)
29+
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
30+
decoder.dateDecodingStrategy = .formatted(formatter)
2831
}
2932

3033
do {
@@ -45,9 +48,12 @@ open class CodableHelper {
4548
encoder.outputFormatting = .prettyPrinted
4649
}
4750
encoder.dataEncodingStrategy = .base64
48-
if #available(iOS 10.0, *) {
49-
encoder.dateEncodingStrategy = .iso8601
50-
}
51+
let formatter = DateFormatter()
52+
formatter.calendar = Calendar(identifier: .iso8601)
53+
formatter.locale = Locale(identifier: "en_US_POSIX")
54+
formatter.timeZone = TimeZone(secondsFromGMT: 0)
55+
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
56+
encoder.dateEncodingStrategy = .formatted(formatter)
5157

5258
do {
5359
returnedData = try encoder.encode(value)

modules/swagger-codegen/src/main/resources/swift4/Extensions.mustache

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ extension Dictionary: JSONEncodable {
5454
func encodeToJSON() -> Any {
5555
var dictionary = [AnyHashable: Any]()
5656
for (key, value) in self {
57-
dictionary[key as! NSObject] = encodeIfPossible(value)
57+
dictionary[key] = encodeIfPossible(value)
5858
}
5959
return dictionary as Any
6060
}

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ protocol JSONEncodable {
1111
}
1212

1313
public enum ErrorResponse : Error {
14-
case Error(Int, Data?, Error)
14+
case error(Int, Data?, Error)
1515
}
1616

1717
open class Response<T> {
@@ -28,8 +28,8 @@ open class Response<T> {
2828
public convenience init(response: HTTPURLResponse, body: T?) {
2929
let rawHeader = response.allHeaderFields
3030
var header = [String:String]()
31-
for (key, value) in rawHeader {
32-
header[key as! String] = value as? String
31+
for case let (key, value) as (String, String) in rawHeader {
32+
header[key] = value
3333
}
3434
self.init(statusCode: response.statusCode, header: header, body: body)
3535
}

modules/swagger-codegen/src/main/resources/swift4/Podspec.mustache

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ Pod::Spec.new do |s|
1616
s.documentation_url = '{{podDocumentationURL}}'{{/podDocumentationURL}}
1717
s.source_files = '{{projectName}}/Classes/**/*.swift'{{#usePromiseKit}}
1818
s.dependency 'PromiseKit/CorePromise', '~> 4.4.0'{{/usePromiseKit}}{{#useRxSwift}}
19-
s.dependency 'RxSwift', '~> 3.4.1'{{/useRxSwift}}
19+
s.dependency 'RxSwift', '~> 4.0'{{/useRxSwift}}
2020
s.dependency 'Alamofire', '~> 4.5.0'
2121
end

modules/swagger-codegen/src/main/resources/swift4/api.mustache

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ open class {{classname}} {
7474
return Observable.create { observer -> Disposable in
7575
{{operationId}}({{#allParams}}{{paramName}}: {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) { {{#returnType}}data, {{/returnType}}error in
7676
if let error = error {
77-
observer.on(.error(error as Error))
77+
observer.on(.error(error))
7878
} else {
79-
observer.on(.next({{#returnType}}data!{{/returnType}}))
79+
observer.on(.next({{#returnType}}data!{{/returnType}}{{^returnType}}(){{/returnType}}))
8080
}
8181
observer.on(.completed)
8282
}

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ open class {{classname}}: {{#parent}}{{{parent}}}{{/parent}}{{^parent}}Codable{{
6464
}
6565
{{/additionalPropertiesType}}
6666

67-
{{#hasVars}}
67+
{{^parent}}{{#hasVars}}
6868
public init({{#vars}}{{name}}: {{{datatypeWithEnum}}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/vars}}) {
6969
{{#vars}}
7070
self.{{name}} = {{name}}
7171
{{/vars}}
7272
}
73-
{{/hasVars}}
73+
{{/hasVars}}{{/parent}}
7474

7575
// Encodable protocol methods
7676

@@ -79,7 +79,7 @@ open class {{classname}}: {{#parent}}{{{parent}}}{{/parent}}{{^parent}}Codable{{
7979
var container = encoder.container(keyedBy: String.self)
8080
8181
{{#vars}}
82-
try container.encode{{#isListContainer}}Array{{/isListContainer}}{{^required}}IfPresent{{/required}}({{{name}}}, forKey: "{{{baseName}}}")
82+
try container.encode{{^required}}IfPresent{{/required}}({{{name}}}, forKey: "{{{baseName}}}")
8383
{{/vars}}
8484
{{#additionalPropertiesType}}
8585
try container.encodeMap(additionalProperties)
@@ -88,11 +88,11 @@ open class {{classname}}: {{#parent}}{{{parent}}}{{/parent}}{{^parent}}Codable{{
8888

8989
// Decodable protocol methods
9090

91-
public {{#parent}}override {{/parent}}required init(from decoder: Decoder) throws {
91+
public required init(from decoder: Decoder) throws {
9292
let container = try decoder.container(keyedBy: String.self)
9393
9494
{{#vars}}
95-
{{name}} = try container.decode{{#isListContainer}}Array{{/isListContainer}}{{^required}}IfPresent{{/required}}({{#isListContainer}}{{{items.datatype}}}{{/isListContainer}}{{^isListContainer}}{{{datatypeWithEnum}}}{{/isListContainer}}.self, forKey: "{{{baseName}}}")
95+
{{name}} = try container.decode{{^required}}IfPresent{{/required}}({{{datatypeWithEnum}}}.self, forKey: "{{{baseName}}}")
9696
{{/vars}}
9797
{{#additionalPropertiesType}}
9898
var nonAdditionalPropertyKeys = Set<String>()
@@ -101,6 +101,9 @@ open class {{classname}}: {{#parent}}{{{parent}}}{{/parent}}{{^parent}}Codable{{
101101
{{/vars}}
102102
additionalProperties = try container.decodeMap({{{additionalPropertiesType}}}.self, excludedKeys: nonAdditionalPropertyKeys)
103103
{{/additionalPropertiesType}}
104+
{{#parent}}
105+
try super.init(from: decoder)
106+
{{/parent}}
104107
}
105108
}
106109

0 commit comments

Comments
 (0)