美文网首页
链式编程思想

链式编程思想

作者: lcc小莫 | 来源:发表于2018-05-02 17:45 被阅读0次

什么是链式编程?
顾名思义,链式编程是通过一行代码,实现某种功能。这里比较经典的案例就是masonry框架,相信对于我们来说都不陌生。类似于这种效果:

 make.top.equalTo(self.view).offset(60)

是可以通过(.)实现某种效果的。
而通过”点”语法,将需要执行的代码块连续的书写下去,就是链式编程.它能使代码可读性强,书写方便,简单解藕。

链式编程尝试

下面我们来尝试一下用链式编程,实现一个计算器的功能
创建一个MannerResultModel管理类和NSObject+sum.h分类,其中,MannerResultModel是对result结果的管理

MannerResultModel.h 
#import <Foundation/Foundation.h>
@interface MannerResultModel : NSObject
//计算结果
@property(assign,nonatomic)int result;

// 调用带参数的方法
//-(instancetype)add:(int)value;

// 调用无参数的block
//-(void(^)(int value))add;

//调用有参数,并且有返回值block
-(MannerResultModel *(^)(int value))add;
-(MannerResultModel *(^)(int value))reduce;
-(MannerResultModel *(^)(int value))multiply;
-(MannerResultModel *(^)(int value))divide;

@end

MannerResultModel.m
#import "MannerResultModel.h"

@implementation MannerResultModel
// 加
-(MannerResultModel * (^)(int value))add{
    __weak typeof(self)weakSelf = self;
    return ^(int value){
        weakSelf.result += value;
        return self;
    };
}
// 减
-(MannerResultModel * (^)(int value))reduce{
    __weak typeof(self)weakSelf = self;
    return ^(int value){
        weakSelf.result -= value;
        return self;
    };
}
// 乘
-(MannerResultModel * (^)(int value))multiply{
    __weak typeof(self)weakSelf = self;
    return ^(int value){
        weakSelf.result *= value;
        return self;
    };
}
// 除
-(MannerResultModel * (^)(int value))divide{
    __weak typeof(self)weakSelf = self;
    return ^(int value){
        weakSelf.result /= value;
        return self;
    };
}

NSObject+sum.h类
#import <Foundation/Foundation.h>
#import "MannerResultModel.h"
@interface NSObject (sum)
+ (int)lc_makeContraints:(void(^)(MannerResultModel *))sumBlock;
@end

NSObject+sum.m类
#import "NSObject+sum.h"
@implementation NSObject (sum)
+ (int)lc_makeContraints:(void (^)(MannerResultModel *))sumBlock{
    MannerResultModel * mgr = [[MannerResultModel alloc]init];
    sumBlock(mgr);
    return mgr.result;
}
@end

尝试一:用带参数的返回本身的方法回调
结果:实现的是[]调用效果,不能够实现链式效果

int result = [NSString lc_makeContraints:^(MannerResultModel *mar) {
        MannerResultModel *manner = [mar add:111];
     }];
NSLog(@"result====%d",result);

尝试二:用不带参数的block的方法回调
结果:实现的第一个可以使用(.)语法,因为没有返回值,所以不能再调用其它方法
*/不能够实现链式效果
int result = [NSString lc_makeContraints:^(MannerResultModel *mar) {
mar.add(100);
}];
NSLog(@"result====%d",result);

尝试三:有参数的block ,返回对象本身
尝试结果:用‘( )’实现函数式编程 + ‘ . ’形成链式编程(带参),用block实现

int result = [NSString lc_makeContraints:^(MannerResultModel *msg) {
    msg.add(100).reduce(99).multiply(2).divide(2);
}];
NSLog(@"result====%d",result);

尝试结果:实现了类似于masonry的链式效果,good!
最后总结:

msg.add(100).reduce(99).multiply(2).divide(2);

所谓的这种链式编程,实际上是把block作为一个返回值,并且是返回一个对象,再次进行点语法时,依然调用方法,然后返回一个对象,所以可以一直进行方法操作,实现某种功能。

原理

原理就是调用的属性的类型或者方法的返回类型为原调用属性的类型
例如说UILabel调用了某个方法或者属性,得到的类型还是UILabel,那么还可以继续调用UILabel的属性或者方法

明白了吗?明白了吗?
END

相关文章

  • 链式编程思想

    链式编程思想 链式编程思想

  • 一、链式编程思想、响应式编程思想和函数式编程

    1. 链式编程思想 链式编程思想的核心就是方法的返回值必须是Block,Masonry是链式编程思想应用的代表。 ...

  • 链式编程思想简介

    链式编程思想简介

  • 工作iOS技术总结

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

  • Swift 链式编程思想让你的代码更优雅

    Swift链式编程思想 一、知识小集锦 在介绍链式编程思想之前,我们先了解一下我们所知道的一些编程思想: l面向过...

  • Swift 链式编程思想学习

    Swift链式编程思想 一、知识小集锦 在介绍链式编程思想之前,我们先了解一下我们所知道的一些编程思想: l面向过...

  • 编程思想-链式编程

    编程思想-链式编程 链式编程(链式调用)的主要表现是支持点语法结构的代码,代表库可以参照 Masonry 或 Sn...

  • 链式编程思想

    # 1,链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性提高。 2,链式编...

  • 链式编程思想

    什么是链式编程?顾名思义,链式编程是通过一行代码,实现某种功能。这里比较经典的案例就是masonry框架,相信对于...

  • 链式编程思想

    作为一个iOS程序员基本上都应该接触过Masonry这个自动布局库。这个库能够帮助程序员极大程度的简化自动布局的代...

网友评论

      本文标题:链式编程思想

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