什么是typedef?
typedef就是一种替换,与宏不同的是它还可以进行对象的声明。
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
例如:
typedef int NSInteger;
表示对NSInteger进行了一个别名的设置,其表示的就是long或者int类型。
char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,和一个字符变量;
即* pa 和 pb,pb是没有* 的
// 以下则可行:
typedef char* PCHAR;
PCHAR pa, pb;则是两个指针。
使用typedef来定义一个block
1.typedef void(^AAABlock)(NSString *string);
2.typedef int(^BBBBlock)(NSString *string);
3.typedef int(^CCCBlock)(void);
1是我们定义了一个名为AAABlock的block,它的返回值是void,接受参数为NSString类型的string。
2是我们定义了一个名为BBBBlock的block,它的返回值是int,接受参数为NSString类型的string。
3是我们定义了一个名为CCCBlock的block,它的返回值是int,没有参数。
以此类推。
这里主要讲一下如何在具体方法中实现block回调
我们以AFNetworking封装为例子。
首先定义两个回调处理的block:
typedef void(^SuccessBlock)(id responseBody);
typedef void(^FailureBlock)(NSString *error);
此时我们定义一个方法,参数中加入block:
-(void)postDataToServer:(NSMutableDictionary*)parameters url:(NSString*)url successBlock:(SuccessBlock)successBlock failureBlock:(FailureBlock)failureBlock{
}
可以看到上面的方法中,方法中都带上了block参数。
接着方法的编写:
-(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){
}];
}
}
此时完成方法的编写。
然后我们来调用这个方法:
[[NetworkSingleton sharedManager] postDataToServer:postDict url:[NSString stringWithFormat:@""] successBlock:^(id responseBody) {
//业务代码
}failureBlock:^(NSString*error) {
//业务代码
}];
这样,一个block具体使用就完成了。
感谢指教。