什么是typedef?
typedef就是一種替換,與宏不同的是它還可以進(jìn)行對(duì)象的聲明。
typedef為C語(yǔ)言的關(guān)鍵字,作用是為一種數(shù)據(jù)類型定義一個(gè)新名字。這里的數(shù)據(jù)類型包括內(nèi)部數(shù)據(jù)類型(int,char等)和自定義的數(shù)據(jù)類型(struct等)。
例如:
typedef int NSInteger;
表示對(duì)NSInteger進(jìn)行了一個(gè)別名的設(shè)置,其表示的就是long或者int類型。
char* pa, pb; // 這多數(shù)不符合我們的意圖,它只聲明了一個(gè)指向字符變量的指針,和一個(gè)字符變量;
即* pa 和 pb,pb是沒有* 的
// 以下則可行:
typedef char* PCHAR;
PCHAR pa, pb;則是兩個(gè)指針。
使用typedef來定義一個(gè)block
1.typedef void(^AAABlock)(NSString *string);
2.typedef int(^BBBBlock)(NSString *string);
3.typedef int(^CCCBlock)(void);
1是我們定義了一個(gè)名為AAABlock的block,它的返回值是void,接受參數(shù)為NSString類型的string。
2是我們定義了一個(gè)名為BBBBlock的block,它的返回值是int,接受參數(shù)為NSString類型的string。
3是我們定義了一個(gè)名為CCCBlock的block,它的返回值是int,沒有參數(shù)。
以此類推。
這里主要講一下如何在具體方法中實(shí)現(xiàn)block回調(diào)
我們以AFNetworking封裝為例子。
首先定義兩個(gè)回調(diào)處理的block:
typedef void(^SuccessBlock)(id responseBody);
typedef void(^FailureBlock)(NSString *error);
此時(shí)我們定義一個(gè)方法,參數(shù)中加入block:
-(void)postDataToServer:(NSMutableDictionary*)parameters url:(NSString*)url successBlock:(SuccessBlock)successBlock failureBlock:(FailureBlock)failureBlock{
}
可以看到上面的方法中,方法中都帶上了block參數(shù)。
接著方法的編寫:
-(void)postDataToServer:(NSMutableDictionary*)parameters url:(NSString*)url successBlock:(SuccessBlock)successBlock failureBlock:(FailureBlock)failureBlock{
[manager POST:urlStr parameters:parameters success:^(AFHTTPRequestOperation*operation,id responseObject){
successBlock(responseObject);
}failure:^(AFHTTPRequestOperation*operation,NSError*error){
}];
}
}
此時(shí)完成方法的編寫。
然后我們來調(diào)用這個(gè)方法:
[[NetworkSingleton sharedManager] postDataToServer:postDict url:[NSString stringWithFormat:@""] successBlock:^(id responseBody) {
//業(yè)務(wù)代碼
}failureBlock:^(NSString*error) {
//業(yè)務(wù)代碼
}];
這樣,一個(gè)block具體使用就完成了。
感謝指教。