iOS链式编程

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

  • 像这样通过.语法,将需要执行的代码块连续的书写下去, 就是链式编程. 它能使代码简单易读,书写方便.
  • 像这样equalTo(self.myView) 通过’()’去调用函数,一般调用完返回的还是这个对象本身, 就是函数式编程.

简单写一下链式编程的逻辑

  • 创建一个分类,代码如下:
//
//  UILabel+category.h
//  DEMO
//
//  Created by soliloquy on 2017/8/21.
//  Copyright © 2017年 soliloquy. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UILabel (category)

- (UILabel *)mas_makeCustomlabel:(void(^)(UILabel *label))block;
+ (UILabel *)mas_makeCustomlabel:(void(^)(UILabel *label))block;
- (UILabel *(^)(NSString *str))textStr;
- (UILabel *(^)(UIColor *tColor))tColor;
- (UILabel *(^)(NSInteger tFont))tFont;
- (UILabel *(^)(CGRect tFrame))tFrame;
@end

//
//  UILabel+category.m
//  DEMO
//
//  Created by soliloquy on 2017/8/21.
//  Copyright © 2017年 soliloquy. All rights reserved.
//

#import "UILabel+category.h"

@implementation UILabel (category)

- (UILabel *)mas_makeCustomlabel:(void(^)(UILabel *label))block {
    block(self);
    return self;
}

+ (UILabel *)mas_makeCustomlabel:(void(^)(UILabel *label))block {
    UILabel *l = [[UILabel alloc]init];
    block(l);
    return l;
}

- (UILabel *(^)(NSString *str))textStr {
    return ^(NSString *str) {
        self.text = str;
        return self;
    };
}

- (UILabel *(^)(UIColor *tColor))tColor {
    return ^(UIColor *c){
        self.textColor = c;
        return self;
    };
}

- (UILabel *(^)(NSInteger tFont))tFont {
    return ^(NSInteger f) {
        self.font = [UIFont systemFontOfSize:f];
        return self;
    };
}

- (UILabel *(^)(CGRect tFrame))tFrame {
    return ^(CGRect tFrame) {
        self.frame = tFrame;
        return self;
    };
}

@end

  • 用法如下
//
//  ViewController.m
//  DEMO
//
//  Created by soliloquy on 2017/8/21.
//  Copyright © 2017年 soliloquy. All rights reserved.
//

#import "ViewController.h"
#import "UILabel+category.h"


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UILabel *l = [UILabel mas_makeCustomlabel:^(UILabel *label) {
        label.tFrame(CGRectMake(10, 100, 300, 100)).tFont(20).tColor([UIColor redColor]).textStr(@"服都是公开活动寺管会我偶的厚厚的回拨后回归hi奥");
    }];
    [self.view addSubview:l];
}

@end

Github: https://github.com/soliloquy-local/Method-chaining.git
以上就是简单的链式编程和函数式编程的入门思想,更多的还是要通过自己多阅读别人的代码,多去敲。总有一天你会很好的掌握这个思想,成为大神!!!

推荐阅读更多精彩内容

  • 链式编程的介绍与Masonry 首先看一下OC下使用优秀第三方框架Masonry在实现一个自动布局时候的实现代码:...
    子斌阅读 86评论 0 1
  • 在iOS中,链式编程虽然用的不太多,但是,在特定的应用环境下,利用block实现链式编程的话,会大大的提高编程效率...
    顶级蜗牛阅读 164评论 1 2
  • 题记:iOS的开发语言之一--Objective-C,是一门动态语言,它使用了一种动态的消息发送机制,即对象(ob...
    Coder_gaigai阅读 231评论 0 1
  • 掌握了reactiveCocoa的基本使用后,被响应式编程的思想所震撼,颠覆了我自己的代码写法,于是乎想了解下与之...
    帅气影中人阅读 33评论 0 1
  • iOS 链式编程简单的使用 链式编程-顾名思义,链式,连贯性为其主要特征,放在编程领域来讲,说简单点就是把一系列的...
    熊猫小贼_阅读 308评论 0 3