2
虽然我打算将来切换到Alamofire
,但与此同时,我正在将我的AFHTTPSessionManager
子类从objc转换为swift。我有一些问题转换我的自定义dataTaskWithHTTPMethod
方法。该函数将覆盖AFHTTPSessionManager.dataTaskWithHTTPMethod
,以便我可以向请求添加一些额外的头并将响应主体传递到失败完成关闭中。在swift中使用AFHTTPSessionManager
@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;
}
我主要是有困难找出如何重写功能的第一部分。在swift中处理NSError
并将其传递给函数的行为有所不同,我无法使用NSErrorPointer
替换。