ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

iOS 函数式(链式)编程

2021-10-06 16:00:39  阅读:187  来源: 互联网

标签:return 函数 NSLog self 编程 iOS Person 链式


https://www.cnblogs.com/chzheng/p/5949376.html

 

函数式编程概念

  • 函数式编程是种编程范式
  • 函数式编程 Functional Programming,简写 FP
  • 使用特点,将局部小的逻辑计算封装为一个个小的函数体,在实际应用中将这些小的函数体 自由组合
  • 可以接受函数当作输入(参数)和输出(返回值)
  • 函数式编程的基础是 block闭包
  • 函数式编程的代表作品:Masnory / SnapKit
make.centerY.equalTo(self.view).offset(100);

函数式编程体验

基本方法调用

  • 定义 Person 类
@interface Person : NSObject

- (void)eat;
- (void)run;

@end

@implementation Person

- (void)eat {
    NSLog(@"吃");
}

- (void)run {
    NSLog(@"跑");
}

@end
  • 调用方法
Person *p = [[Person alloc] init];
[p run];
[p eat];
  • 存在问题,每个方法要分别调用,不能组合调用

改进一 —— 添加方法的返回值

- (Person *)eat1 {
    NSLog(@"吃1");
    return self;
}

- (Person *)run1 {
    NSLog(@"跑1");
    return self;
}
  • 方法调用
[[person eat1] run1];
  • 改进点
    • 可以在一个方法的基础上继续调用后续的方法
    • 方法调用顺序更加灵活

改进二 —— 将返回值修改为 block,以函数的形式调用

- (Person * _Nonnull (^)())eat2 {

    Person * (^myEatBlock)() = ^ Person * () {
        NSLog(@"吃2");

        return self;
    };

    return myEatBlock;
}

- (Person * _Nonnull (^)())run2 {

    return ^ Person * {
        NSLog(@"跑2");

        return self;
    };
}
  • 执行函数
person.eat2().run2();
person.run2().eat2();

改进三 —— 增加函数参数

- (Person * _Nonnull (^)(NSString * _Nonnull))eat3 {
    return ^ Person * (NSString * food) {
        NSLog(@"吃 %@", food);

        return self;
    };
}

- (Person * _Nonnull (^)(float))run3 {
    return ^ Person * (float distance) {
        NSLog(@"跑了 %f 米", distance);

        return self;
    };
}
  • 执行函数
p.run3(100).eat3(@"food");

简单的实际运用可以参考 我的这篇文章

标签:return,函数,NSLog,self,编程,iOS,Person,链式
来源: https://www.cnblogs.com/itlover2013/p/15371495.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有