【发布时间】:2015-10-19 15:47:07
【问题描述】:
虽然我确实计划将来切换到 Alamofire,但与此同时,我希望将我的 AFHTTPSessionManager 子类从 objc 转换为 swift。我在转换我的自定义 dataTaskWithHTTPMethod 方法时遇到了一些问题。该函数覆盖了AFHTTPSessionManager.dataTaskWithHTTPMethod,因此我可以在请求中添加一些额外的标头并将响应主体传递给失败完成闭包。
@interface WebAPIClient : AFHTTPSessionManager
及实现功能:
- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method
URLString:(NSString *)URLString
csrfToken:(NSString *)csrfToken
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *, id))success
failure:(void (^)(NSURLSessionDataTask *, NSError *, id))failure
{
NSError *serializationError = nil;
NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[NSURL URLWithString:URLString relativeToURL:self.baseURL].absoluteString parameters:parameters error:&serializationError];
if (serializationError) {
if (failure) {
dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{
failure(nil, serializationError, nil);
});
}
return nil;
}
if (csrfToken!=nil) {
[request setValue:@"XMLHttpRequest" forHTTPHeaderField:@"X-Requested-With"];
[request setValue:csrfToken forHTTPHeaderField:@"X-CSRFToken"];
}
__block NSURLSessionDataTask *dataTask = nil;
dataTask = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
if (failure) {
failure(dataTask, error, responseObject);
}
} else {
if (success) {
success(dataTask, responseObject);
}
}
}];
return dataTask;
}
我很难弄清楚如何重写函数的第一部分。快速处理 NSError 并将其传递给函数的行为不同,我无法使用 NSErrorPointer 替换。
【问题讨论】:
标签: ios objective-c swift afnetworking nsurlsession