@@ -40,9 +40,9 @@ private extension NSURLSessionDataTask {
40
40
}
41
41
}
42
42
43
- private var completionHandler : ( ( NSData ! , NSURLResponse ! , NSError ! ) -> Void ) ? {
43
+ private var completionHandler : ( ( NSData ? , NSURLResponse ? , NSError ? ) -> Void ) ? {
44
44
get {
45
- return ( objc_getAssociatedObject ( self , & dataTaskCompletionHandlerKey) as? Box < ( NSData ! , NSURLResponse ! , NSError ! ) -> Void > ) ? . unbox
45
+ return ( objc_getAssociatedObject ( self , & dataTaskCompletionHandlerKey) as? Box < ( NSData ? , NSURLResponse ? , NSError ? ) -> Void > ) ? . unbox
46
46
}
47
47
48
48
set {
@@ -167,18 +167,24 @@ public class API: NSObject, NSURLSessionDelegate, NSURLSessionDataDelegate {
167
167
dispatch_async ( mainQueue, { handler ( . Failure( Box ( error) ) ) } )
168
168
return
169
169
}
170
-
171
- let mappedResponse : Result < T . Response , NSError > = self . responseBodyParser ( ) . parseData ( data) . flatMap { rawResponse in
172
- if let response = request. responseFromObject ( rawResponse) {
173
- return success ( response)
174
- } else {
175
- let userInfo = [ NSLocalizedDescriptionKey: " failed to create model object from raw object. " ]
176
- let error = NSError ( domain: APIKitErrorDomain, code: 0 , userInfo: userInfo)
177
- return failure ( error)
170
+
171
+ if let data = data {
172
+ let mappedResponse : Result < T . Response , NSError > = self . responseBodyParser ( ) . parseData ( data) . flatMap { rawResponse in
173
+ if let response = request. responseFromObject ( rawResponse) {
174
+ return success ( response)
175
+ } else {
176
+ let userInfo = [ NSLocalizedDescriptionKey: " failed to create model object from raw object. " ]
177
+ let error = NSError ( domain: APIKitErrorDomain, code: 0 , userInfo: userInfo)
178
+ return failure ( error)
179
+ }
180
+
178
181
}
179
-
182
+ dispatch_async ( mainQueue, { handler ( mappedResponse) } )
183
+ } else {
184
+ let userInfo = [ NSLocalizedDescriptionKey: " unable to get response body despite NSURLSession raised no error. " ]
185
+ let error = NSError ( domain: APIKitErrorDomain, code: 0 , userInfo: userInfo)
186
+ dispatch_async ( mainQueue, { handler ( . Failure( Box ( error) ) ) } )
180
187
}
181
- dispatch_async ( mainQueue, { handler ( mappedResponse) } )
182
188
}
183
189
184
190
task. resume ( )
0 commit comments