Block的用法

1.block作为属性

写法1:typedef声明block名称

typedef id(^Block_Name)(id arg1, id arg2);
@property (nonatomic, copy) Block_Name block;

写法2:直接书写

@property (nonatomic, copy) id(^Block_Name)(id arg1, id arg2);

2.block作为参数

写法:

- (void)method:(id(^)(id arg1,id arg2))argBlock;

3.block作为返回值

- (void (^)())walk;
//实现
- (void(^)())walk{
    return ^(){
        NSLog(@"走起");
    };
}

block作为返回值可以实现简单的链式编程

- (Person *(^)(int))eat;
- (Person *(^)(int))sleep;

//实现
- (Person *(^)(int))eat{
    return ^(int dun){
        NSLog(@"吃了%d顿",dun);
        return self;
    };
}

- (Person *(^)(int))sleep{
    return ^(int minute){
        NSLog(@"又睡了%d分钟",minute);
        return self;
    };
}

通过上面的写法,person可以无限的调用eat以及sleep方法,因为这2个方法返回的都是person类本身,还可以传入block的参数,我们还可以通过这个用法来修改对应类的变量,使之写起来有种链式的感觉,调用后:

Person *person = [Person new];
person.eat(10).sleep(20).eat(30).sleep(100);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容