/*************************************************************************************************/
/* 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; //里面會(huì)調(diào)用到NSObject的方法,所以這里不用id
@property (nonatomic, weak) id<RTAPIManagerInterceptor> interceptor;
/*
baseManager是不會(huì)去設(shè)置errorMessage的凶伙,派生的子類(lèi)manager可能需要給controller提供錯(cuò)誤信息。所以為了統(tǒng)一外部調(diào)用的入口浇辜,設(shè)置了這個(gè)變量。
派生的子類(lèi)需要通過(guò)extension來(lái)在保證errorMessage在對(duì)外只讀的情況下使派生的manager子類(lèi)對(duì)errorMessage具有寫(xiě)權(quán)限唾戚。
*/
@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這個(gè)方法,這個(gè)方法會(huì)通過(guò)param source來(lái)獲得參數(shù)柳洋,這使得參數(shù)的生成邏輯位于controller中的固定位置
(NSInteger)loadData;
(void)cancelAllRequests;
(void)cancelRequestWithRequestId:(NSInteger)requestID;
// 攔截器方法,繼承之后需要調(diào)用一下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;
/*
用于給繼承的類(lèi)做重載叹坦,在調(diào)用API之前額外添加一些參數(shù),但不應(yīng)該在這個(gè)函數(shù)里面修改已有的參數(shù)熊镣。
子類(lèi)中覆蓋這個(gè)函數(shù)的時(shí)候就不需要調(diào)用[super reformParams:params]了
RTAPIBaseManager會(huì)先調(diào)用這個(gè)函數(shù),然后才會(huì)調(diào)用到 id<RTAPIManagerValidator> 中的 manager:isCorrectWithParamsData:
所以這里返回的參數(shù)字典還是會(huì)被后面的驗(yàn)證函數(shù)去驗(yàn)證的募书。
假設(shè)同一個(gè)翻頁(yè)Manager绪囱,ManagerA的paramSource提供page_size=15參數(shù),ManagerB的paramSource提供page_size=2參數(shù)
如果在這個(gè)函數(shù)里面將page_size改成10莹捡,那么最終調(diào)用API的時(shí)候鬼吵,page_size就變成10了。然而外面卻覺(jué)察不到這一點(diǎn)篮赢,因此這個(gè)函數(shù)要慎用齿椅。
這個(gè)函數(shù)的適用場(chǎng)景:
當(dāng)兩類(lèi)數(shù)據(jù)走的是同一個(gè)API時(shí),為了避免不必要的判斷启泣,我們將這一個(gè)API當(dāng)作兩個(gè)API來(lái)處理涣脚。
那么在傳遞參數(shù)要求不同的返回時(shí),可以在這里給返回參數(shù)指定類(lèi)型寥茫。
具體請(qǐng)參考AJKHDXFLoupanCategoryRecommendSamePriceAPIManager和AJKHDXFLoupanCategoryRecommendSameAreaAPIManager
*/
- (NSDictionary *)reformParams:(NSDictionary *)params;
- (void)cleanData;
- (BOOL)shouldCache;