链式编程初探 | 一

//
//  FRPString.h
//  xxxxxDemo
//
//  Created by xxxxxx on 2020/11/22.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface FRPString : NSObject
@property (nonatomic,strong)NSMutableString *sourceString;
+ (NSString *)FRPStringOperate:(void(^)(FRPString *fpr))operate;
- (FRPString *(^)(NSString *))append;
- (FRPString *(^)(NSString *))remove;
@end

NS_ASSUME_NONNULL_END
//
//  FRPString.m
//  xxxxxDemo
//
//  Created by xxxxxx on 2020/11/22.
//

#import "FRPString.h"

@implementation FRPString

+ (NSString *)FRPStringOperate:(void(^)(FRPString *fpr))operate
{
    FRPString *frpObj = [[FRPString alloc]init];
    frpObj.sourceString = [NSMutableString string];
    if(operate) operate(frpObj);
    return frpObj.sourceString.copy;
}
- (FRPString *(^)(NSString *))append
{
    FRPString *(^adBlock)(NSString *) = ^FRPString* (NSString *string){
        [self.sourceString appendString:string];
        NSLog(@"%@",self.sourceString);
        return self;
    };
    return adBlock;
}
- (FRPString *(^)(NSString *))remove
{
    FRPString *(^rmBlock)(NSString *) = ^FRPString* (NSString *string){
        if([self.sourceString rangeOfString:string].location != NSNotFound){
            [self.sourceString deleteCharactersInRange:[self.sourceString rangeOfString:string]];
            NSLog(@"%@",self.sourceString);
        }
        return self;
    };
    return rmBlock;
}

@end

调用:

//
[FRPString FRPStringOperate:^(FRPString * _Nonnull fpr) {
    fpr.append(@"this is my first string by add").remove(@"add");
}];
//类似于
FRPString *frp = [[FRPString alloc]init];
frp.sourceString = [NSMutableString string];
//返回block
FRPString *(^addBlock)(NSString *) = [frp append];
//通过返回的block,返回了FRPString对象
FRPString *adFrp = addBlock(@"添加一些字符串");
FRPString *(^rmBlock)(NSString *) = [adFrp remove];
FRPString *rmFrp = rmBlock(@"添加");
//点语法是直接调用方法所返回的block,并且为其block进行传参
//
//或
frp.append(@"是block吗?").remove(@"吗?");
//

Leave a Reply

Required fields are marked *