iOS-链式编程

链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)

  • 链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)

  • 代表:masonry框架。

  • BabyBluetooth
    Masonry中的链式可能相对比较零散,并不能体现出链式的任务逻辑连贯性。

下面介绍另外一个优秀的第三方框架BabyBluetooth,BabyBluetooh是简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容ios和mac osx。

CoreBluetooth所有方法都是通过委托完成,代码冗余且顺序凌乱。BabyBluetooth使用block方法,可以重新按照功能和顺序组织代码,并使用链式编程将一组任务用一条链完成。

baby.having(self.currPeripheral).and.channel(channelOnPeropheralView).then.connectToPeripherals().discoverServices().discoverCharacteristics().readValueForCharacteristic().discoverDescriptorsForCharacteristic().readValueForDescriptors().begin();

用一条链就完成了一整套的连接peripheral,发现服务,发现特性,读取特性值,发现描述,读取描述值的任务链,而不需要多次的分散调用,流程逻辑非常清晰。

下面用链式编程思想写一个Demo
以分类形式进行计算操作
.h

#import <Foundation/Foundation.h>
@class CalculateManager;

@interface NSObject (Calculate)
+(NSInteger)xw_makeCalculate:(void(^)(CalculateManager *))block;
@end

.m

#import "NSObject+Calculate.h"
#import "CalculateManager.h"

@implementation NSObject (Calculate)
+(NSInteger)xw_makeCalculate:(void(^)(CalculateManager *))block{
    CalculateManager *mgr = [[CalculateManager alloc] init];
    block(mgr);
    return mgr.result;
}
@end

自定义计算类,使所有方法用block代码块形式表示
.h

#import <Foundation/Foundation.h>

@interface CalculateManager : NSObject

@property (nonatomic, assign) NSInteger result;

-(CalculateManager *(^)(NSInteger))add;

-(CalculateManager *(^)(NSInteger))subtract;

-(CalculateManager *(^)(NSInteger))mult;

-(CalculateManager *(^)(NSInteger))division;
@end

.m

#import "CalculateManager.h"

@implementation CalculateManager

-(CalculateManager *(^)(NSInteger))add{
    return ^(NSInteger value){
        _result += (value);
        return self;
    };
}

-(CalculateManager *(^)(NSInteger))subtract{
    return ^(NSInteger value){
        _result -= (value);
        return self;
    };
}

-(CalculateManager *(^)(NSInteger))mult{
    return ^(NSInteger value){
        _result *= (value);
        return self;
    };
}

-(CalculateManager *(^)(NSInteger))division{
    return ^(NSInteger value){
        _result /= (value);
        return self;
    };
}

@end

在使用链式编程思想调用对象方法就可以这样操作:

-(void)calculate{
    NSInteger result = [NSObject xw_makeCalculate:^(CalculateManager * mgr) {
        mgr.add(100).add(200).division(2).mult(3).subtract(50).add(121);
    }];
    NSLog(@"result: %zd",result);
}

java程序员熟悉的点语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值