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
替換。