iOS 简单地链式编程

一 方法的实现

#import <Foundation/Foundation.h>

@interface RJBlockTool : NSObject
//计算
+ (CGFloat)makeCalculator:(void(^)(RJBlockTool *rj_tool))block;

typedef RJBlockTool *(^RJCalculator)(CGFloat num);

@property (nonatomic, strong, readonly) RJCalculator plus;//
@property (nonatomic, strong, readonly) RJCalculator subtract;
@property (nonatomic, strong, readonly) RJCalculator multiply;
@property (nonatomic, strong, readonly) RJCalculator divide;

//拼接字符串
+ (NSString *)makeAppendingString:(void(^)(RJBlockTool *rj_tool))block;

@property (nonatomic, strong, readonly) RJBlockTool *(^date)(NSString *str);
@property (nonatomic, strong, readonly) RJBlockTool *(^who)(NSString *str);
@property (nonatomic, strong, readonly) RJBlockTool *(^note)(NSString *str);

@end
#import "RJBlockTool.h"

@interface RJBlockTool()
//1 计算的结果
@property(nonatomic,assign) CGFloat resultCalculator;

//2 处理后的字符串
@property(nonatomic,strong) NSString *resultString;
@end

@implementation RJBlockTool

/*************************** 计算(加减乘除) *******************************/
+(CGFloat)makeCalculator:(void (^)(RJBlockTool *))block{
    if (block) {
        RJBlockTool *tool = [[RJBlockTool alloc] init];
        block(tool);
        return tool.resultCalculator;
    }
    return 0;
}
-(RJCalculator)plus{
    return ^(CGFloat num){
        self.resultCalculator += num;
        
        return self;
    };
}
-(RJCalculator)subtract{
    return ^(CGFloat num){
        self.resultCalculator -= num;
        
        return self;
    };
}
-(RJCalculator)multiply{
    return ^(CGFloat num){
        self.resultCalculator *= num;
        
        return self;
    };
}
-(RJCalculator)divide{
    return ^(CGFloat num){
        self.resultCalculator /= num;
        
        return self;
    };
}
/*************************** 计算(加减乘除) *******************************/



/*************************** 拼接字符串 *******************************/
+(NSString *)makeAppendingString:(void (^)(RJBlockTool *))block{
    if (block) {
        RJBlockTool *tool = [[RJBlockTool alloc] init];
        tool.resultString = @"date,who一起去看电影,备注:note";
        block(tool);
        return tool.resultString;
    }
    return @"为什么你什么都不说?";
}
-(RJBlockTool *(^)(NSString *))date{
    return ^(NSString *str){
        self.resultString = [self.resultString stringByReplacingOccurrencesOfString:@"date" withString:str];
        
        return self;
    };
}
-(RJBlockTool *(^)(NSString *))who{
    return ^(NSString *str){
        self.resultString = [self.resultString stringByReplacingOccurrencesOfString:@"who" withString:str];
        
        return self;
    };
}
-(RJBlockTool *(^)(NSString *))note{
    return ^(NSString *str){
        self.resultString = [self.resultString stringByReplacingOccurrencesOfString:@"note" withString:str];
        
        return self;
    };
}

/*************************** 拼接字符串 *******************************/

@end

二 使用

NSLog(@"计算结果1-->%f",[RJBlockTool makeCalculator:^(RJBlockTool *rj_tool) {
    rj_tool.plus(10).subtract(2).multiply(5).divide(8);
}]);

NSLog(@"计算结果2-->%f",[RJBlockTool makeCalculator:^(RJBlockTool *rj_tool) {
    rj_tool.plus(10);
    rj_tool.subtract(2);
    rj_tool.multiply(5);
    rj_tool.divide(5);
}]);

NSLog(@"计算结果:-->%@",[RJBlockTool makeAppendingString:^(RJBlockTool *rj_tool) {
    rj_tool.date(@"今天").who(@"我和她").note(@"嘿嘿嘿");
}]);
计算结果1-->5.000000
计算结果2-->8.000000
计算结果:-->今天,我和她一起去看电影,备注:嘿嘿嘿
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,466评论 25 708
  • ## 缘起 今谈近体诗,多谈格律甚于谈诗,有本末易位之嫌。 而谈格律多用句式公式,不知者多以格律为初等数学化学,又...
    ptjiang阅读 1,119评论 1 3
  • 今天的这个故事很简单,简单到两个人只认识不到十天,就迅速确定了恋爱关系。 恋爱是什么感觉? 感觉就是,总对着屏幕痴...
    画念风阅读 179评论 0 0
  • 垂直居中 方法一:使用padding设置块级元素的padding-top和padding-bottom相等,注意是...
    放风筝的小小马阅读 406评论 0 0
  • 听罗辑思维很上瘾啊,从此我有了新男神,他叫罗振宇,江湖人称罗胖子。 昨天听了两个,一个是讲游戏与生活的关联,很有思...
    wuli小白侠阅读 465评论 0 0