鏈式編程

最近有時間看了下Masonry的實現原理,大家都知道Masonry就是經典的鏈式編程思想

void(^block)(MASConstraintMaker *maker) = ^(MASConstraintMaker *make) {
    // 描述控件的所有約束
    make.left.top.equalTo(@10);
    make.right.bottom.equalTo(@(-10));
};

// 參數:block
[redView mas_makeConstraints:block];

 mas_makeConstraints作用:給控件設置布局,把控件的所有約束保存到約束制造者中  ---- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block
 
 1.創建一個約束制造者
 2.調用block(maker),把所有的控件的約束全部保存到約束制造者
 3.[constraintMaker install]:遍歷約束制造者的所有約束給控件添加約束

鏈式編程小練習

1.創建XMCaculatorMaker文件,計算器maker類
2.定義計算結果屬性
3.定義加法運算方法

#import <Foundation/Foundation.h>

@interface XMCaculatorMaker : NSObject

@property (nonatomic, assign)int result;

-(XMCaculatorMaker *(^)(int num))add;

@end


#import "XMCaculatorMaker.h"

@implementation XMCaculatorMaker

-(XMCaculatorMaker *(^)(int num))add
{
    return ^(int num){
        _result = _result + num;
        return self;
    };
}

創建NSObject分類,所有它的子類都可調用

#import <Foundation/Foundation.h>
#import "XMCaculatorMaker.h"

@interface NSObject (XMCaculaterMaker)

以后計算都使用這個方法,一調用這個方法就返回結果
-(int)makeCaculater:(void(^)(XMCaculatorMaker *maker))block;

@end


#import "NSObject+XMCaculaterMaker.h"

@implementation NSObject (XMCaculaterMaker)

-(int)makeCaculater:(void (^)(XMCaculatorMaker *maker))block
{    
    創建制造者
    XMCaculatorMaker *maker = [[XMCaculatorMaker alloc] init];
    NSLog(@"%@",maker);
    block(maker);
    return maker.result;
}

調用,進行計算

NSObject *object = [[NSObject alloc]init];

block:使代碼高聚合
[object makeCaculater:^(XMCaculatorMaker *maker) {
    把所有的計算代碼封裝到這里
    NSLog(@"-----%@",maker);
    maker.add(10).add(20);
}];

總結

  • 之前開發中比較習慣,把事情封裝到一個方法中

  • 鏈式編程思想:把要做的事情封裝到block,給外界提供一個返回這個Block的方法

  • 鏈式編程思想方法特點:
    1.方法返回值必須是block
    2.block參數:放需要操作的內容
    3.block返回值:方法調用者

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容