iOS干货iOS

iOS链式编程之block作为返回值使用

2017-05-18  本文已影响455人  陌路问途

链式编程近几年算是一个比较火的概念了,使用过masonry的人应该也比较熟悉链式编程这个概念,那么,在iOS中是怎么实现链式编程的呢?其实iOS的链式编程一般都是使用block作为返回值这种方法来实现的,现在我在这边为大家简单介绍下block作为返回值的简单使用。

首先,我们先创建一个Person类,写一个方法,返回值是一个没返回值没参数的block:

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

之后我们可以调用这个方法,用点语法(只要符合系统默认setter、getter书写格式的方法都可以使用点语法)来调用这个方法

Person *person = [Person new];
person.walk();

看看打印:


image.png

之后,我们可以写一个返回的是一个返回值是Person类,参数是int的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);

看看打印:

image.png

是不是有点链式编程的感觉了呢?

上一篇下一篇

猜你喜欢

热点阅读