美文网首页iOS DeveloperiOS 开发
Objective-C实现类似Masonry的链式句法

Objective-C实现类似Masonry的链式句法

作者: Lucifer_Lin | 来源:发表于2016-02-20 15:41 被阅读91次

前言

最近对Masonry的链式句法很感兴趣,于是尝试自己实现该效果.我是做了一个加法器,用法如下:

int result = [NSObject makeCaculator:^(CaculatorMaker *make) {
      make.add(2).add(4);
    }];
    NSLog(@"result is %d", result);

打印结果:

2016-02-20 15:18:17.178 练习链式语法封装[30206:1952288] result is 6

思路

实现链式句法主要原理是利用OC的block特性,addmake对象的一个block属性,定义如下:

@property (copy, nonatomic, readonly) CaculatorMaker *(^add)(int);

该block属性以block的形式被调用时,会用到一个int参数,返回一个CaculatorMaker对象(其实是返回的self),然后返回的CaculatorMaker对象可以再次调用自己的add属性,从而达到链式句法的效果


具体实现

  • NSObject+Caculator.h 文件
#import <Foundation/Foundation.h>
@class CaculatorMaker;
//NSObject类的拓展
@interface NSObject (Caculator)
+ (int)makeCaculator:(void (^)(CaculatorMaker *make)) caculatorBlock;

@end

//CaculatorMaker类的声明
@interface CaculatorMaker : NSObject
@property (assign, nonatomic) int result;
@property (copy, nonatomic, readonly) CaculatorMaker *(^add)(int);

@end
  • NSObject+Caculator.m 文件
#import "NSObject+Caculator.h"

@implementation NSObject (Caculator)

+ (int)makeCaculator:(void (^)(CaculatorMaker *))caculatorBlock {
    CaculatorMaker *make = [CaculatorMaker new];
    caculatorBlock(make);
    return make.result;
}

@end

@implementation CaculatorMaker

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

- (CaculatorMaker *(^)(int))add {
    return ^(int a){
        self.result += a;
        return self;
    };
}

@end

后记

希望和大家共同学习,其实我是来practice markdown的O(∩_∩)O~

相关文章

  • Objective-C实现类似Masonry的链式句法

    前言 最近对Masonry的链式句法很感兴趣,于是尝试自己实现该效果.我是做了一个加法器,用法如下: 打印结果: ...

  • Objective-C实现链式编程语法(DSL)

    Objective-C实现链式编程语法(DSL) Objective-C实现链式编程语法(DSL)

  • 链式编程

    链式编程 实现一个类似于 Masonry 的链式编程,加法。 第一步 我们需要一个返回值是 Int 的方法,入参应...

  • 链式编程

    最近有时间看了下Masonry的实现原理,大家都知道Masonry就是经典的链式编程思想 链式编程小练习 1.创建...

  • iOS 之Masonry点语法简单实现 OC链式(点)语法

    常见的OC中括号链式语法 Masonry 上图: 点语法:在 Objective-C 中,对于点语法的使用,最常见...

  • Objective-C实现链式编程

    首先,我们看下优秀的自动布局第三方框架Masonry/SnapKit的链式语法应用: Objective-C、Sw...

  • 在Objective-C中实现链式语法

    其他语言比如 Lua, 实现链式语法很容易。但在 Objective-C 中,如何实现链式语法呢? 注:这里讨论的...

  • 编程方式

    链式编程思想:将多个操作通过(.)链接在一起,返回值是block来实现.如masonry. masonry 响应式...

  • iOS 链式编程初探

    链式编程 Masonry 打点调用原理之前一直好奇Masonry 框架是怎样实现的,可以一直打点调用,语法使用起来...

  • iOS链式编程及函数式编程

    提到链式编程和函数式编程,最典型的代表是Masonry 比较完美的实现了函数式编程和链式编程。例如 ``` [vi...

网友评论

    本文标题:Objective-C实现类似Masonry的链式句法

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