RTAPIBaseManager

/*************************************************************************************************/
/* RTAPIBaseManager */
/*************************************************************************************************/
@interface RTAPIBaseManager : NSObject

@property (nonatomic, weak) id<RTAPIManagerApiCallBackDelegate> delegate;
@property (nonatomic, weak) id<RTAPIManagerParamSourceDelegate> paramSource;
@property (nonatomic, weak) id<RTAPIManagerValidator> validator;
@property (nonatomic, weak) NSObject<RTAPIManager> *child; //里面会调用到NSObject的方法,所以这里不用id
@property (nonatomic, weak) id<RTAPIManagerInterceptor> interceptor;

/*
baseManager是不会去设置errorMessage的,派生的子类manager可能需要给controller提供错误信息。所以为了统一外部调用的入口,设置了这个变量。
派生的子类需要通过extension来在保证errorMessage在对外只读的情况下使派生的manager子类对errorMessage具有写权限。
*/
@property (nonatomic, copy, readonly) NSString *errorMessage;
@property (nonatomic, readonly) RTAPIManagerErrorType errorType;

@property (nonatomic, assign, readonly) BOOL isReachable;
@property (nonatomic, assign, readonly) BOOL isLoading;

  • (id)fetchDataWithReformer:(id<RTAPIManagerCallbackDataReformer>)reformer;

//尽量使用loadData这个方法,这个方法会通过param source来获得参数,这使得参数的生成逻辑位于controller中的固定位置

  • (NSInteger)loadData;

  • (void)cancelAllRequests;

  • (void)cancelRequestWithRequestId:(NSInteger)requestID;

// 拦截器方法,继承之后需要调用一下super

  • (void)beforePerformSuccessWithResponse:(AIFURLResponse *)response;

  • (void)afterPerformSuccessWithResponse:(AIFURLResponse *)response;

  • (void)beforePerformFailWithResponse:(AIFURLResponse *)response;

  • (void)afterPerformFailWithResponse:(AIFURLResponse *)response;

  • (BOOL)shouldCallAPIWithParams:(NSDictionary *)params;

  • (void)afterCallingAPIWithParams:(NSDictionary *)params;

/*
用于给继承的类做重载,在调用API之前额外添加一些参数,但不应该在这个函数里面修改已有的参数。
子类中覆盖这个函数的时候就不需要调用[super reformParams:params]了
RTAPIBaseManager会先调用这个函数,然后才会调用到 id<RTAPIManagerValidator> 中的 manager:isCorrectWithParamsData:
所以这里返回的参数字典还是会被后面的验证函数去验证的。

假设同一个翻页Manager,ManagerA的paramSource提供page_size=15参数,ManagerB的paramSource提供page_size=2参数
如果在这个函数里面将page_size改成10,那么最终调用API的时候,page_size就变成10了。然而外面却觉察不到这一点,因此这个函数要慎用。

这个函数的适用场景:
当两类数据走的是同一个API时,为了避免不必要的判断,我们将这一个API当作两个API来处理。
那么在传递参数要求不同的返回时,可以在这里给返回参数指定类型。

具体请参考AJKHDXFLoupanCategoryRecommendSamePriceAPIManager和AJKHDXFLoupanCategoryRecommendSameAreaAPIManager

*/

  • (NSDictionary *)reformParams:(NSDictionary *)params;
  • (void)cleanData;
  • (BOOL)shouldCache;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容