美文网首页iOS Developer
从 Masonry 的源代码看链式编程与函数式编程

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

作者: 小苗晓雪 | 来源:发表于2016-12-12 22:52 被阅读46次

主 Bundle 栏

Snip20161212_1.png

调试区截屏

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 <UIKit/UIKit.h>

@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 <Foundation/Foundation.h>

@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

热爱开源

相关文章

  • iOS链式编程及函数式编程

    提到链式编程和函数式编程,最典型的代表是Masonry 比较完美的实现了函数式编程和链式编程。例如 ``` [vi...

  • 函数式编程 响应式编程

    学习函数式编程对于我们理解Masonry && Snapkit有很大的帮助,函数式编程(链式编程)。下面文章也是参...

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

    主 Bundle 栏 调试区截屏 Masonry 中的链式编程与函数式编程代码范例: ViewController...

  • iOS-Main-链式编程和函数式编程体验

    Masonry 经典的代表链式编程和函数式编程 思考,怎么样创建一个自己的函数式或链式编程呢? 创建项目,并搞一个...

  • 函数式编程和链式编程

    链式编程的代表:masonry框架。函数式编程的代表:ReactiveCocoa框架。 本人录制技术视频地址:ht...

  • iOS链式编程的实现方案

    在iOS中,Masonry自动布局库是典型的链式与函数式编程的集中体现。基于函数式编程范式的思想,包装组装对应的功...

  • iOS-链式编程

    函数式编程------->链式编程 函数式编程: 调用方式 我们最终目的是将函数式编程转换为链式编程:首先将调用方...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

  • OC 函数式编程和链式编程

    函数式编程 和 链式编程,可能大家在日常开发中都有接触过,第三方框架 Masonry 就是利用了这个方式。 函数式...

  • iOS链式编程

    谈到链式编程和函数式编程, Masonry就是最经典的代表, 没事可以多看看它的源码。例如:make.top.eq...

网友评论

    本文标题:从 Masonry 的源代码看链式编程与函数式编程

    本文链接:https://www.haomeiwen.com/subject/fprvmttx.html