casatwy / CTNetworking

iOS networking API layer
Other
488 stars 104 forks source link

统一返回数据类型 #19

Closed YearRen closed 5 years ago

casatwy commented 5 years ago

这里是不需要做统一的

因为你不能确保所有公司的所有API service都是返回json格式,具体以什么格式给到外面,由对应Service Protocol的实现来决定的

Vincentzzg commented 5 years ago

@YearRen 你可以看下断点看下AFNetworking库里面的AFURLSessionManager的232行的代码 responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:data error:&serializationError];

这里会根据不同类型的responseSerializer(AFHTTPResponseSerializer、AFJSONResponseSerializer、AFXMLParserResponseSerializer...)返回不同类型的对象

这里会回调到CTNetworking中CTApiProxy中的这里:

/** 这个函数存在的意义在于,如果将来要把AFNetworking换掉,只要修改这个函数的实现即可。 */
- (NSNumber *)callApiWithRequest:(NSURLRequest *)request success:(CTCallback)success fail:(CTCallback)fail
{
    // 跑到这里的block的时候,就已经是主线程了。
    __block NSURLSessionDataTask *dataTask = nil;
    dataTask = [[self sessionManagerWithService:request.service] dataTaskWithRequest:request
                                         uploadProgress:nil
                                       downloadProgress:nil
                                      completionHandler:^(NSURLResponse * _Nonnull response, NSData * _Nullable responseData, NSError * _Nullable error) {

所以,返回类型不能统一