iOS 链式编程(Masonry)


相信大多数同学都是用过Masonry框架进行布局,他是一个UI布局约束框架;


1、首先Masonry主要用到了Block和链式编程,由于每个View都是可以通过自身实例直接调用,因此可以想到Masonry首先创建了UIView的一个分类“View+MASAdditions.h”;


2、然后创建了一个“MASConstraintMaker.h”来管理相关的约束;


3、约束调用通过

- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;

进行调用;采用了block作为参数,并且block携带了一个约束管理者参数;


4、布局调用实验使用了链式语法:

  [btn mas_makeConstraints:^(MASConstraintMaker *make) {

        make.left.right.top.equalTo(@10);

    }];


下面举一个计算的demo说明如何使用链式编程:

为了实现这样一个链式函数操作,我们创建一个基于“NSObject+Hook.h”的分类和“CalcuteManager”类


一、NSObject+Hook.h 方便其它类调用的基类扩展


#import <Foundation/Foundation.h>

#import "CalcuteManager.h"


@interface NSObject (Hook)


- (void)hk_calcute:(void(^)(CalcuteManager *manager))block;


@end


#import "NSObject+Hook.h"


@implementation NSObject (Hook)


- (void)hk_calcute:(void(^)(CalcuteManager *manager))block {

    CalcuteManager *manager = [[CalcuteManageralloc]init];

    

    block(manager);

}


二、CalcuteManager.h 计算统计类


#import <Foundation/Foundation.h>


@interface CalcuteManager : NSObject


@property(nonatomic,assign)int result;


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


- (CalcuteManager *(^)(int num))minus;


@end



#import "CalcuteManager.h"


@implementation CalcuteManager


- (CalcuteManager *(^)(int num))add {

    return ^(int num){

        _result += num;

         NSLog(@"add--:%d",_result);

         return self;

    };

}


- (CalcuteManager *(^)(int num))minus {

    return ^(int num) {

        _result -= num;

        NSLog(@"minus--:%d",_result);

        return self;

    };

}


@end



如上例子就简单实现了一个链式编程demo;   



发布了172 篇原创文章 · 获赞 35 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/u012198553/article/details/78648875