block高聚合
- 这是计算类 .h
#import <Foundation/Foundation.h>
@interface xxx : NSObject
@property(nonatomic,assign)int result;
- (xxx *(^)(int nub))add;
@end - 计算类 .m
#import "xxx.h"
@implementation xxx
- (xxx *(^)(int nub))add{
return ^(int nub){
_result +=nub;
return self;
};
}
-
模仿来自于masonry .h文件
- 首先你要确定一个扩展,一个公用的扩展计算方法
#import <Foundation/Foundation.h>
#import "xxx.h"
@interface NSObject (category)
+ (int)makeCategory:(void(^)(xxx *make))block;
- 首先你要确定一个扩展,一个公用的扩展计算方法
-
.m文件
#import "NSObject+category.h"
@implementation NSObject (category)
+ (int)makeCategory:(void (^)(xxx *))block{
xxx * make = [[xxx alloc]init];
block(make);
return make.result;
} -
因为定义原因,所以可以在任何一个类都可以调用
int result = [NSObject makeCategory:^(xxx *maker) {
maker.add(10).add(20);
maker.add(30).add(40);
}];
NSLog(@"%d",result); -
这样就模仿masonry的block了,具体的想知道原因多看看这个框架就知道了
另外一种高聚合代码
UILabel * lable = ({
lable = [[UILabel alloc]init];
lable.text = @"111";
lable.frame = CGRectMake(0, 0, 0, 0);
lable;
});
-这样就可以特别容易找到对应的定义了,而且看起来简洁,不要为什么
网友评论