Skip to content

Commit b006e77

Browse files
committed
fix type of completion handler to avoid use of IUO
1 parent 4207801 commit b006e77

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

APIKit/APIKit.swift

+18-12
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ private extension NSURLSessionDataTask {
4040
}
4141
}
4242

43-
private var completionHandler: ((NSData!, NSURLResponse!, NSError!) -> Void)? {
43+
private var completionHandler: ((NSData?, NSURLResponse?, NSError?) -> Void)? {
4444
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
4646
}
4747

4848
set {
@@ -167,18 +167,24 @@ public class API: NSObject, NSURLSessionDelegate, NSURLSessionDataDelegate {
167167
dispatch_async(mainQueue, { handler(.Failure(Box(error))) })
168168
return
169169
}
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+
178181
}
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))) })
180187
}
181-
dispatch_async(mainQueue, { handler(mappedResponse) })
182188
}
183189

184190
task.resume()

0 commit comments

Comments
 (0)