函数式、链式语法

#函数式、链式语法

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
/** 传统写法 */
- (void)eat;
- (void)sleep;

/** 使用‘[]’连续调用 */
- (Person *)eat1;
- (Person *)sleep1;

/** 使用‘()’函数式编程,block实现 */

- (void(^)(void))eat2;
- (void(^)(void))sleep2;

/** 使用函数式 + 链式 无参 */
- (Person *(^)(void))eat3;
- (Person *(^)(void))sleep3;

/** 函数式 + 链式 带参 */
- (Person * (^)(NSString *foodName))eat4;
- (Person * (^)(NSInteger hour))sleep4;
@end

Person.m

#import "Person.h"

@implementation Person
#pragma mark - 传统写法,单独调用,不能任意顺序组合
- (void)eat {
    NSLog(@"%s",__func__);
}

-(void)sleep {
    NSLog(@"%s",__func__);
}

#pragma mark - 使用‘[]’实现连续调用
- (Person *)eat1 {
    NSLog(@"%s",__func__);
    return self;
}

-(Person *)sleep1{
    NSLog(@"%s",__func__);
    return self;
}

#pragma mark - 使用‘()’函数式编程,block实现

-(void (^)(void))eat2 {

    //定义block
    void (^eat2Block)(void) = ^ {
        NSLog(@"%s",__FUNCTION__);
    };
    return eat2Block;
}

-(void (^)(void))sleep2 {
    //定义block
    void (^sleep2Block)(void) = ^ {
        NSLog(@"%s",__FUNCTION__);
    };
    return sleep2Block;
}

#pragma mark - 使用函数式 + 链式 无参

-(Person *(^)(void))eat3{

    Person *(^eat3Block)(void) = ^{
        NSLog(@"%s",__FUNCTION__);
        return self;
    };
    return eat3Block;
}

-(Person *(^)(void))sleep3{

    Person *(^sleep3Block)(void) = ^{
        NSLog(@"%s",__FUNCTION__);
        return self;
    };
    return sleep3Block;
}

#pragma mark - 函数式 + 链式 带参
- (Person *(^)(NSString *))eat4
{
    Person * (^eat4Block)(NSString *) = ^(NSString *foodName) {
        NSLog(@"这个人吃了: %@",foodName);
        return self;
    };
    return eat4Block;
}
//上下两种写法一样
- (Person *(^)(NSInteger))sleep4
{
    return ^(NSInteger hour) {
        NSLog(@"然后睡了%ld小时",(long)hour);
        return self;
    };
}

@end

上一篇
常用宏定义 常用宏定义
设备尺寸#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 当前Xcode支持iOS8及以上 #define SCREEN_WIDTH ([[UIScreen mainScreen] respon
2018-04-08
下一篇
实用框架 实用框架
新闻选项卡1.新闻类的顶部选项卡类似网易新闻:WMPageController,HMSegmentControl,HTHorizontalSelectionList 这三者我跟推荐第一种,第一种有很多手势,比如点击顶部列表会滑动到最顶端。具
2018-04-02
目录