美文网首页
Masonry中链式编程的实现

Masonry中链式编程的实现

作者: 尘埃Wang | 来源:发表于2019-05-10 18:25 被阅读0次

1、前言

我们都知道,Masonry是可以实现make.left.mas_equalTo(@15);这种写法,那Masonry大神是如何实现的呢?下面我们通过一个例子进行探究。

2、实例探究

我们来试想这样一个场景,我们想实现一个Person类,类中有如下三个属性:

@interface Person () 
@property (nonatomic, copy) NSString *name; 
@property (nonatomic, copy) NSString *phoneNum;
@property (nonatomic, copy) NSString *address; 
@end

那我们如何实现self.name(@"尘埃").phoneNum(@"123").address(@"北京")

在这里我们需要思考两个问题:
1、如何使用 . 链式调用?
2、如何传参?

第一个问题相对简单,我们都知道实现 . 的调用,本质就是使用当前对象调用方法,从而进行消息转发,那我在每一个属性的返回值返回当前对象self就可以了。例如下图:

- (Person *)name {
        
    NSLog(@"名字是?");
    return self;
}

- (Person *)phoneNum {
    
    NSLog(@"手机号是?");
    return self;
}

- (Person *)address {
    
    NSLog(@"地址是?");
    return self;
}

就可以使用self.name.phoneNum.address来调用啦。

第二个问题:传参。我们知道传参有多种方式:block,代理,通知,函数指针等等,因为我们仅仅是两个值之间的传值,所以代理、通知、函数指针等都可以排除掉。那block的优势是什么呢?

我们知道block相当于储存代码块,那对于block如何使用,我们继续向下看。

- (Person * (^)(NSString *))name {
    
    return ^(NSString *personName) {
        
        NSLog(@"名字是%@", personName);
        return self;
    };
}

- (Person * (^)(NSString *))phoneNum {
    
    return ^(NSString *phoneNum) {
        
        NSLog(@"手机号是%@", phoneNum);
        return self;
    };
}

- (Person * (^)(NSString *))address {
    
    return ^(NSString *address) {
        
        NSLog(@"地址是%@", address);
        return self;
    };
}

如上代码所示,返回一个带有实例对象返回值类型的block就可以了。以上我们就可以实现本章的最终目的了。
调用self.name(@"尘埃").phoneNum(@"123").address(@"北京")结果为:

名字是尘埃
手机号是123
地址是北京

以上就是我们对所有类似链式编程的探究了。

3、最后

学无止境,且行却珍惜。写博客经验不多,希望看到本篇博客的大佬们多多留言扶正。后续会继续更新其他学习相关。

相关文章

  • 链式编程

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

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

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

  • Masonry中链式编程的实现

    1、前言 我们都知道,Masonry是可以实现make.left.mas_equalTo(@15);这种写法,那M...

  • 链式编程思想

    什么是链式编程?顾名思义,链式编程是通过一行代码,实现某种功能。这里比较经典的案例就是masonry框架,相信对于...

  • 简单的链式编程(iOS)

    1.链式编程思想 最初接触Masonry框架的时候还不知道什么链式编程,最初的感觉就是Masonry使用起来很简洁...

  • 编程方式

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

  • 一、链式编程思想、响应式编程思想和函数式编程

    1. 链式编程思想 链式编程思想的核心就是方法的返回值必须是Block,Masonry是链式编程思想应用的代表。 ...

  • iOS 链式编程初探

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

  • 编程思想-链式编程

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

  • 从 Masonry 的源代码看链式编程与函数式编程

    主 Bundle 栏 调试区截屏 Masonry 中的链式编程与函数式编程代码范例: ViewController...

网友评论

      本文标题:Masonry中链式编程的实现

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