美文网首页
Objective-C链式编程详解

Objective-C链式编程详解

作者: OC笔记 | 来源:发表于2016-10-27 16:18 被阅读0次

最近看到很多关于Objective-C链式编程的文章,我还是不甚了解。有人模仿Manory写了计算器,我参考了并研究了一下,总结了Objective-C可以实现链式编程的原因和条件。

先附上Demo代码
Fruite.h

@interface Fruite : NSObject
// 在OC中,可以通过点语法调用无参方法(why?),这是OC可以实现链式编程的根本条件
- (void)func;
// 通过以下两个方法可以看出,链式编程条件:1.该Block作为无参方法的返回值 2.该Block返回值为对象实例
- (Fruite * (^) (NSString *))addFruite;            // 此方法为无参方法,可以链式调用
- (Fruite * (^) ())addFruite:(NSString *)oneFruite;// 此方法为有参函数,不能链式调用
@end

Fruite.m

#import "Fruite.h"
#define WeakFruite() __weak typeof(self) weakself = self
@interface Fruite ()
@property (nonatomic, copy) NSString *fruiteName;
@end
@implementation Fruite
#pragma mark - description
- (NSString *)description {
    return self.fruiteName;
}
#pragma mark - getters
- (NSString *)fruiteName {
    if (!_fruiteName) {
        _fruiteName = @"Apple";
    }
    
    return _fruiteName;
}
#pragma mark - chain methods
- (void)func {
    NSLog(@"this is func.");
}

// 1.使用Block作为返回值的原因,是因为Block可以直接跟(参数),这种调用类似于C语言方法调用;
// 2.Block返回值为self,保证可以链式调用
- (Fruite * (^) (NSString *))addFruite {
    WeakFruite();
    return ^ (NSString *oneFruite) {
        weakself.fruiteName = [NSString stringWithFormat:@"%@_%@", weakself.fruiteName, oneFruite];
    };
}
- (Fruite * (^) ())addFruite:(NSString *)oneFruite {
    WeakFruite();
    return ^ {
        weakself.fruiteName = [NSString stringWithFormat:@"%@_%@", weakself.fruiteName, oneFruite];
    };
}
@end

调用:

Fruite *fruite = [Fruite new];
fruite.func;
fruite.addFruite(@"Oriange").addFruite(@"Banana");
NSLog(@"%@", fruite.description);
[fruite addFruite:@"Mango"]();
NSLog(@"%@", fruite.description);

打印结果:
this is func.
Apple_Oriange_Banana
Apple_Oriange_Banana_Mango

研究了半天,总算明白了Objective-C可以实现链式编程的原因及条件,总结如下:
Objective-C可以实现链式编程的根本原因:在Objective-C中,可以通过点语法调用无参方法。
Objective-C实现链式编程的条件:1.该Block作为无参方法的返回值 2.该Block返回值为对象实例。

但是我还是没搞明白,点语法为什么可以调用无参方法呢?...

相关文章

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

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

  • Objective-C链式编程详解

    最近看到很多关于Objective-C链式编程的文章,我还是不甚了解。有人模仿Manory写了计算器,我参考了并研...

  • Masonry和链式编程

    转自Objective-C 链式编程最近看到了链式编程和函数式编程这两个概念,网上查了一些资料,但是发现资料都千篇...

  • Objective-C 链式编程

    最近看到了链式编程和函数式编程这两个概念,网上查了一些资料,但是发现资料都千篇一律,我心中存在的这几个疑惑根本没有...

  • jQuery 链式编程

    jQuery 链式编程 链式编程原理 链式编程代码示例 隐式迭代

  • 链式编程思想

    链式编程思想 链式编程思想

  • iOS 链式编程

    链式编程 主要介绍链式编程原理,以及如何创建链式编程 编程范式 在介绍链式编程之前,首先来了解下什么是编程范式。 ...

  • Objective-C实现链式编程

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

  • Objective-C实现链式编程

  • ReactiveObjC入门

    ReactiveObjC基础用法 iOS开发三种编程方式(响应式编程、函数编程、链式编程),函数编程最常用,链式编...

网友评论

      本文标题:Objective-C链式编程详解

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