iOS中的链式编程

作者: aaa000 | 来源:发表于2016-06-01 12:16 被阅读1222次

1.什么是链式(函数式)编程?

通过高阶函数以点为连接将多个函数连接在一起完成参数传递和复杂的操作!

例如在Masonry中的这样的代码

make.right.equalTo(self.right).insets(kPadding);

分析不难得出
1、一个实例方法后面可以接括号拼接参数,那么可以判断当前实例方法返回值应该是一个block!(block 是一种特殊的函数)

2、make.right.equalTo(self.right) 后面可以接着调用实例方法 可以分析出这个表达式返回值应该是一个该类的实例 也就是说 block的返回值是该类的实例变量

通过上面的分析 看看代码

#import <Foundation/Foundation.h>

@interface Calculate : NSObject

@property(nonatomic,assign)NSInteger result;//计算结果

-(Calculate *)clear;//清零

-(Calculate *)printResult;//打印结果

-(Calculate * (^)(NSInteger))add;//在结果上加

-(Calculate *(^)(NSInteger))sub;//在结果上减

@end

要想实例方法可以通过点方式连接起来,那么 1、返回值定位该类的一个实例 2、必须用将调用方法的结果存储起来(这里是声明一个全局变量来存储计算的结果)

.m文件函数的实现部分

#import "Calculate.h"

@implementation Calculate

-(instancetype)init{
    if (self = [super init]) {
        self.result = 0;
    }
    return self;
}



-(Calculate *)clear{
    self.result = 0;
    return self;
}
-(Calculate *)printResult
{
    NSLog(@"计算结果:%ld\n",self.result);
    return self;
}

-(Calculate *(^)(NSInteger))add
{
    return ^(NSInteger i){
        self.result += i;
        return self;
    };
}
-(Calculate *(^)(NSInteger))sub{
    return ^(NSInteger i){
        self.result -= i;
        return self;
    };
}
@end

add函数的返回值是一个 block , 这个block的返回这是一个该类的实例 ,block的参数则为需要处理的数据,block的实现是处理过程!

下面是调用代码

Calculate *cal = [[Calculate alloc]init];
 cal.add(5).add(8).printResult.sub(2).printResult.clear.printResult;
屏幕快照 2016-06-01 上午11.56.26.png

可以看到计算多个数据可以通过一条连接来顺利完成让调用者更加方便!

将调用放在一个语句块中来实现

[scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(weakSelf.view).insets(UIEdgeInsetsMake(20, 10, 10, 10));
    }];

从代码中可以看出 函数mas_makeConstraints的参数是一个block类型

+(NSInteger)markCalculate:(void (^)(Calculate *))block
{
    //创建管理计算者
    Calculate *cal = [[Calculate alloc]init];
    //给参数赋值
    block(cal);
    return cal.result;
}

调用

NSInteger result = [Calculate markCalculate:^(Calculate *make) {
        make.add(10).sub(3).add(2).add(198).printResult;
    }];

高阶函数的使用主要是方便调用者,这些都可以通过一阶函数实现并且简单!

(如有高见敬请留言,学习路上 三人行必有我师!)

相关文章

  • 工作iOS技术总结

    链式编程、函数式、面向接口编程思想 iOS 之ReactiveCocoa 链式编程2 WKWebView的缓存处理...

  • iOS-链式编程思想

    在iOS中,链式编程虽然用的不太多,但是,在特定的应用环境下,利用block实现链式编程的话,会大大的提高编程效率...

  • iOS链式编程

    在iOS中,链式编程虽然用的不太多,但是,在特定的应用环境下,利用block实现链式编程的话,会大大的提高编程效率...

  • ReactiveObjC入门

    ReactiveObjC基础用法 iOS开发三种编程方式(响应式编程、函数编程、链式编程),函数编程最常用,链式编...

  • 链式编程总结

    链式编程总结 @(iOS) 研究了一下链式编程,但是感觉项目中用处不是很多。 介绍 1.什么时候使用链式编程?在面...

  • IOS_编程思想_链式编程练习

    在之前的两篇文章中已经简单的介绍了IOS的编程思想,那在此处写一个链式编程的联系来加深对链式编程思想的理解!!! ...

  • iOS中的链式编程

    前言 作为iOS开发者,很多人看到这个标题最先想到的可能是Masonry和SnapKit。那么什么是链式编程?为什...

  • iOS中的链式编程

    之前一直没有使用Masonry,最近因为比较闲,就尝试使用了下Masonry,但是Masonry这种和Obje...

  • iOS中的链式编程

    1.什么是链式(函数式)编程? 通过高阶函数以点为连接将多个函数连接在一起完成参数传递和复杂的操作! 例如在Mas...

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

    链式编程近几年算是一个比较火的概念了,使用过masonry的人应该也比较熟悉链式编程这个概念,那么,在iOS中是怎...

网友评论

    本文标题:iOS中的链式编程

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