美文网首页
模拟 Masonry 框架的链式语法调用 [函数式编程]

模拟 Masonry 框架的链式语法调用 [函数式编程]

作者: 会飞的超大鱼 | 来源:发表于2019-06-24 22:33 被阅读0次

先来看一下 Masonry 框架的链式语法调用

make.right.equalTo(self.right).inserts(8);

我们点开 right 对象查看头文件中的声明发现类型是一个 MASConstraint 对象

@property (nonatomic, strong, readonly) MASConstraint *right;

我们再点开 equalTo 的声明查看,发现 equalTo 方法返回的是一个 block ,而 block有返回的是一个 MASConstraint 类型,和 right 属于一个类型。

- (MASConstraint * (^)(id))equalTo {
    return ^id(id attribute) {
        return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
    };
}

inserts 方法以此类推...

综上所述,要实现一个链式调用,对象中的方法必须返回当前对象,如需要使用block这种括号()形式,返回值就必须是一个 block。

有了以上方法,我们来写一个 demo,这里以 NSString 为例,新建一个 NSString 的分类,添加一个 append 方法,用于实现字符串拼接的功能。

@interface NSString (AppendString)

- (NSString *(^)(NSString *string))append;

@end

实现部分

@implementation NSString (AppendString)

- (NSString * _Nonnull (^)(NSString * _Nonnull))append {
    return ^(NSString *string) {
        if (!string.length) {
            return self;
        }
        
        return [self stringByAppendingString:string];;
    };
}

@end

最后使用链式语法调用

// 使用链式语法,构成简洁的代码
NSString *string = @"Hello";
NSLog(@"%@", string.append(@" ").append(@"world"));
NSLog(@"%@", @"My".append(@" ").append(@"name").append(@" ").append(@"is").append(@" ").append(@"lili"));

控制台输出:

019-06-24 21:59:46.419181+0800 Block[35210:4572524] Hello world
2019-06-24 21:59:46.419218+0800 Block[35210:4572524] My name is lili

由于demo代码很少就不另外提供demo地址了。

相关文章

  • 模拟 Masonry 框架的链式语法调用 [函数式编程]

    先来看一下 Masonry 框架的链式语法调用 我们点开 right 对象查看头文件中的声明发现类型是一个 MAS...

  • 函数式编程和链式编程

    链式编程的代表:masonry框架。函数式编程的代表:ReactiveCocoa框架。 本人录制技术视频地址:ht...

  • iOS 链式编程初探

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

  • iOS-链式编程

    函数式编程------->链式编程 函数式编程: 调用方式 我们最终目的是将函数式编程转换为链式编程:首先将调用方...

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

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

  • 编程思想-链式编程

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

  • OC 函数式编程和链式编程

    函数式编程 和 链式编程,可能大家在日常开发中都有接触过,第三方框架 Masonry 就是利用了这个方式。 函数式...

  • 函数式编程 响应式编程

    学习函数式编程对于我们理解Masonry && Snapkit有很大的帮助,函数式编程(链式编程)。下面文章也是参...

  • ✎实现iOS中的链式编程和函数式编程

    谈到链式编程和函数式编程,那Masonry几乎就是最经典的代表.如: 像这样 通过”点”语法,将需要执行的代码块连...

  • iOS-Main-链式编程和函数式编程体验

    Masonry 经典的代表链式编程和函数式编程 思考,怎么样创建一个自己的函数式或链式编程呢? 创建项目,并搞一个...

网友评论

      本文标题:模拟 Masonry 框架的链式语法调用 [函数式编程]

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