从 Masonry 的源代码看链式编程与函数式编程

主 Bundle 栏

从 Masonry 的源代码看链式编程与函数式编程_第1张图片
Snip20161212_1.png

调试区截屏

从 Masonry 的源代码看链式编程与函数式编程_第2张图片
Snip20161212_2.png

Masonry 中的链式编程与函数式编程代码范例:

//虽然我知道可能没有这么简单,但是宏观理解来看的话:
//点语法 : --> 链式编程
//小括号 : --> 函数式编程
[self.view  mas_makeConstraints:^(MASConstraintMaker *make) {
      make.top.equalTo (self.view) ;
      make.left.equalTo (self.view) ;
      make.width.mas_equalTo (@40) ;
      make.height.mas_equalTo (@40) ;
}] ;

ViewController.h 文件

#import 

@interface ViewController : UIViewController

@end

ViewController.m 文件

#import "ViewController.h"
#import "Person.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //创建 person 对象:
    Person *person = [[Person alloc] init] ;
    
    //这就是函数式编程与链式编程的结合实例:点语法的遍历和小括号的使用!就酱!
    person.run2().eat2().run2().eat2() ;
    //含参的链式编程代码:
    person.run3(5).eat3(@"管氏翅吧") ;
    
}

@end

Person.h 文件

#import 

@interface Person : NSObject

- (void)run ;
- (void)eat ;

- (Person *)run1 ;
- (Person *)eat1 ;

//哪里能用个小括号?!小括号就是函数式编程中的函数!
//真正的函数式编程的体现是因为返回的是一个 block!
- (Person *(^)())run2 ;
- (Person *(^)())eat2 ;

//含参 block:
- (Person *(^)(NSString *food))eat3 ;
- (Person *(^)(int distance))run3 ;

@end

Person.m 文件

#import "Person.h"

@implementation Person

//无参 block 的 run2:
- (Person *(^)())run2 {
    
    //创建一个 Person 类型的 block 对象并返回对象:
    Person *(^run2Block)() = ^() {
        
        NSLog(@"我就是 run2Block") ;
        //返回对象:
        return self ;
        
    } ;
    
    //要求返回的是一个 block 值,而且这个 block 是 Person 类型的对象:
    return run2Block ;
    
}

//无参 block 的 eat2:
- (Person *(^)())eat2 {
    return ^() {
        NSLog(@"我就是 eat2Block") ;
        return self ;
    } ;
}

//含参 block 的 eat3:
- (Person *(^)(NSString *food))eat3 {
    return ^(NSString *food) {
        NSLog(@"吃的是 %@" , food) ;
        return self ;
    } ;
}

//含参 block 的 run3:
- (Person *(^)(int distance))run3 {
    return ^(int distance) {
        NSLog(@"今晚我跑了 %d 千米" , distance) ;
        return self ;
    } ;
}

@end

热爱开源

你可能感兴趣的:(从 Masonry 的源代码看链式编程与函数式编程)