Skip to content

Commit e956495

Browse files
committed
[Swift] Update to new Swift 2.0 syntax and Xcode 7
Note: configs with responseAs: “PromiseKit” won’t work yet
1 parent b3afbe7 commit e956495

File tree

5 files changed

+63
-29
lines changed

5 files changed

+63
-29
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class APIBase {
1919
2020
if encoded! is [AnyObject] {
2121
var dictionary = [String:AnyObject]()
22-
for (index, item) in enumerate(encoded as! [AnyObject]) {
22+
for (index, item) in (encoded as! [AnyObject]).enumerate() {
2323
dictionary["\(index)"] = item
2424
}
2525
return dictionary
@@ -46,7 +46,7 @@ class RequestBuilder<T> {
4646

4747
func execute() -> Promise<Response<T>> { fatalError("Not implemented") }
4848

49-
func addHeader(#name: String, value: String) -> Self {
49+
public func addHeader(name name: String, value: String) -> Self {
5050
if !value.isEmpty {
5151
headers[name] = value
5252
}

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

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,57 @@ class AlamofireRequestBuilder<T>: RequestBuilder<T> {
3030
managerStore[managerId] = manager
3131
3232
let encoding = isBody ? Alamofire.ParameterEncoding.JSON : Alamofire.ParameterEncoding.URL
33-
let request = manager.request(Alamofire.Method(rawValue: method)!, URLString, parameters: parameters, encoding: encoding)
33+
let xMethod = Alamofire.Method(rawValue: method)
34+
let fileKeys = parameters == nil ? [] : parameters!.filter { $1.isKindOfClass(NSURL) }
35+
.map { $0.0 }
36+
37+
if fileKeys.count > 0 {
38+
manager.upload(
39+
xMethod!, URLString, headers: nil,
40+
multipartFormData: { mpForm in
41+
for (k, v) in self.parameters! {
42+
switch v {
43+
case let fileURL as NSURL:
44+
mpForm.appendBodyPart(fileURL: fileURL, name: k)
45+
break
46+
case let string as NSString:
47+
mpForm.appendBodyPart(data: string.dataUsingEncoding(NSUTF8StringEncoding)!, name: k)
48+
break
49+
case let number as NSNumber:
50+
mpForm.appendBodyPart(data: number.stringValue.dataUsingEncoding(NSUTF8StringEncoding)!, name: k)
51+
break
52+
default:
53+
fatalError("Unprocessable value \(v) with key \(k)")
54+
break
55+
}
56+
}
57+
},
58+
encodingMemoryThreshold: Manager.MultipartFormDataEncodingMemoryThreshold,
59+
encodingCompletion: { encodingResult in
60+
switch encodingResult {
61+
case .Success(let upload, _, _):
62+
self.processRequest(upload, managerId, completion)
63+
case .Failure(let encodingError):
64+
completion(response: nil, erorr: encodingError)
65+
}
66+
}
67+
)
68+
} else {
69+
processRequest(manager.request(xMethod!, URLString, parameters: parameters, encoding: encoding), managerId, completion)
70+
}
71+
72+
}
73+
74+
private func processRequest(request: Request, _ managerId: String, _ completion: (response: Response<T>?, erorr: NSError?) -> Void) {
3475
if let credential = self.credential {
3576
request.authenticate(usingCredential: credential)
3677
}
3778

38-
let defer = Promise<Response<T>>.defer()
39-
request.responseJSON(options: .AllowFragments) { (req, res, json, error) in
79+
request.responseJSON(options: .AllowFragments) { (req, res, result) in
4080
managerStore.removeValueForKey(managerId)
4181
42-
if let error = error {
43-
defer.reject(error)
44-
return
45-
}
46-
if res!.statusCode >= 400 {
47-
//TODO: Add error entity
48-
let error = NSError(domain: res!.URL!.URLString, code: res!.statusCode, userInfo: [:])
49-
defer.reject(error)
82+
if result.isFailure {
83+
completion(response: nil, erorr: result.error)
5084
return
5185
}
5286

@@ -55,7 +89,7 @@ class AlamofireRequestBuilder<T>: RequestBuilder<T> {
5589
defer.fulfill(response)
5690
return
5791
}
58-
if let json: AnyObject = json {
92+
if let json: AnyObject = result.value {
5993
let body = Decoders.decode(clazz: T.self, source: json)
6094
let response = Response(response: res!, body: body)
6195
defer.fulfill(response)

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,17 @@ private var once = dispatch_once_t()
3535
class Decoders {
3636
static private var decoders = Dictionary<String, ((AnyObject) -> AnyObject)>()
3737
38-
static func addDecoder<T>(#clazz: T.Type, decoder: ((AnyObject) -> T)) {
38+
static func addDecoder<T>(clazz clazz: T.Type, decoder: ((AnyObject) -> T)) {
3939
let key = "\(T.self)"
4040
decoders[key] = { decoder($0) as! AnyObject }
4141
}
4242

43-
static func decode<T>(#clazz: [T].Type, source: AnyObject) -> [T] {
43+
static func decode<T>(clazz clazz: [T].Type, source: AnyObject) -> [T] {
4444
let array = source as! [AnyObject]
4545
return array.map { Decoders.decode(clazz: T.self, source: $0) }
4646
}
4747

48-
static func decode<T, Key: Hashable>(#clazz: [Key:T].Type, source: AnyObject) -> [Key:T] {
48+
static func decode<T, Key: Hashable>(clazz clazz: [Key:T].Type, source: AnyObject) -> [Key:T] {
4949
let sourceDictinoary = source as! [Key: AnyObject]
5050
var dictionary = [Key:T]()
5151
for (key, value) in sourceDictinoary {
@@ -54,7 +54,7 @@ class Decoders {
5454
return dictionary
5555
}
5656

57-
static func decode<T>(#clazz: T.Type, source: AnyObject) -> T {
57+
static func decode<T>(clazz clazz: T.Type, source: AnyObject) -> T {
5858
initialize()
5959
if source is T {
6060
return source as! T
@@ -68,7 +68,7 @@ class Decoders {
6868
}
6969
}
7070

71-
static func decodeOptional<T>(#clazz: T.Type, source: AnyObject?) -> T? {
71+
static func decodeOptional<T>(clazz clazz: T.Type, source: AnyObject?) -> T? {
7272
if source is NSNull {
7373
return nil
7474
}
@@ -77,7 +77,7 @@ class Decoders {
7777
}
7878
}
7979

80-
static func decodeOptional<T>(#clazz: [T].Type, source: AnyObject?) -> [T]? {
80+
static func decodeOptional<T>(clazz clazz: [T].Type, source: AnyObject?) -> [T]? {
8181
if source is NSNull {
8282
return nil
8383
}
@@ -86,7 +86,7 @@ class Decoders {
8686
}
8787
}
8888

89-
static func decodeOptional<T, Key: Hashable>(#clazz: [Key:T].Type, source: AnyObject?) -> [Key:T]? {
89+
static func decodeOptional<T, Key: Hashable>(clazz clazz: [Key:T].Type, source: AnyObject?) -> [Key:T]? {
9090
if source is NSNull {
9191
return nil
9292
}
@@ -113,9 +113,9 @@ class Decoders {
113113
// Decoder for {{{classname}}}
114114
Decoders.addDecoder(clazz: {{{classname}}}.self) { (source: AnyObject) -> {{{classname}}} in
115115
let sourceDictionary = source as! [NSObject:AnyObject]
116-
var instance = {{classname}}(){{#vars}}{{#isEnum}}
117-
instance.{{name}} = (sourceDictionary["{{name}}"] as? String).map { {{classname}}.{{datatypeWithEnum}}(rawValue: $0)! }{{#required}}!{{/required}} {{/isEnum}}{{^isEnum}}
118-
instance.{{name}} = Decoders.decode{{^required}}Optional{{/required}}(clazz: {{{baseType}}}.self, source: sourceDictionary["{{name}}"]{{#required}}!{{/required}}){{/isEnum}}{{/vars}}
116+
let instance = {{classname}}(){{#vars}}{{#isEnum}}
117+
instance.{{name}} = (sourceDictionary["{{name}}"] as? String).map { {{classname}}.{{datatypeWithEnum}}(rawValue: $0)! }{{#unwrapRequired}}{{#required}}!{{/required}}{{/unwrapRequired}} {{/isEnum}}{{^isEnum}}
118+
instance.{{name}} = Decoders.decode{{^unwrapRequired}}Optional{{/unwrapRequired}}{{#unwrapRequired}}{{^required}}Optional{{/required}}{{/unwrapRequired}}(clazz: {{{baseType}}}.self, source: sourceDictionary["{{name}}"]{{#unwrapRequired}}{{#required}}!{{/required}}{{/unwrapRequired}}){{/isEnum}}{{/vars}}
119119
return instance
120120
}{{/model}}
121121
{{/models}}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ Pod::Spec.new do |s|
1616
s.documentation_url = '{{podDocumentationURL}}'{{/podDocumentationURL}}
1717
s.source_files = '{{projectName}}/Classes/Swaggers/**/*.swift'{{#usePromiseKit}}
1818
s.dependency 'PromiseKit', '~> 2.1'{{/usePromiseKit}}
19-
s.dependency 'Alamofire', '~> 1.3'
19+
s.dependency 'Alamofire', '~> 2.0.0-beta.1'
2020
end

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ extension {{projectName}}API {
2626
- examples: {{{examples}}}{{/examples}}{{#externalDocs}}
2727
- externalDocs: {{externalDocs}}{{/externalDocs}}{{#hasParams}}
2828
{{/hasParams}}{{#allParams}}
29-
:param: {{paramName}} ({{#isFormParam}}form{{/isFormParam}}{{#isQueryParam}}query{{/isQueryParam}}{{#isPathParam}}path{{/isPathParam}}{{#isHeaderParam}}header{{/isHeaderParam}}{{#isBodyParam}}body{{/isBodyParam}}) {{description}}{{/allParams}}
29+
- parameter {{paramName}}: ({{#isFormParam}}form{{/isFormParam}}{{#isQueryParam}}query{{/isQueryParam}}{{#isPathParam}}path{{/isPathParam}}{{#isHeaderParam}}header{{/isHeaderParam}}{{#isBodyParam}}body{{/isBodyParam}}) {{description}}{{/allParams}}
3030

31-
:returns: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {{description}}
31+
- returns: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {{description}}
3232
*/
33-
func {{operationId}}({{#allParams}}{{^secondaryParam}}#{{/secondaryParam}}{{paramName}}: {{{dataType}}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {
33+
public class func {{operationId}}({{#allParams}}{{^secondaryParam}}{{paramName}} {{/secondaryParam}}{{paramName}}: {{{dataType}}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {
3434
{{^pathParams}}let{{/pathParams}}{{#pathParams}}{{^secondaryParam}}var{{/secondaryParam}}{{/pathParams}} path = "{{path}}"{{#pathParams}}
3535
path = path.stringByReplacingOccurrencesOfString("{{=<% %>=}}{<%paramName%>}<%={{ }}=%>", withString: "\({{paramName}})", options: .LiteralSearch, range: nil){{/pathParams}}
3636
let url = {{projectName}}API.basePath + path
@@ -43,7 +43,7 @@ extension {{projectName}}API {
4343

4444
let requestBuilder: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>.Type = {{projectName}}API.requestBuilderFactory.getBuilder()
4545

46-
return requestBuilder(method: "{{httpMethod}}", URLString: url, parameters: parameters, isBody: {{^queryParams}}true{{/queryParams}}{{#queryParams}}{{^secondaryParam}}false{{/secondaryParam}}{{/queryParams}})
46+
return requestBuilder.init(method: "{{httpMethod}}", URLString: URLString, parameters: parameters, isBody: {{^queryParams}}{{^formParams}}true{{/formParams}}{{/queryParams}}{{#queryParams}}{{^secondaryParam}}false{{/secondaryParam}}{{/queryParams}}{{#formParams}}{{^secondaryParam}}false{{/secondaryParam}}{{/formParams}})
4747
}
4848
{{/operation}}
4949
}

0 commit comments

Comments
 (0)