iOS 链式函数使用
由于今天使用BabyBluetoothLib一个将系统蓝牙进行封装的轻量级库,其中用到了链式函数,因为一直使用Masonry感觉其中的链式函数用起来特别方便,可读性强,由于没有时间一直没研究怎么实现,今天正好抽空研究了一下用法.
链式函数:其实就是返回的是一个block语法块,同时block的返回值为 self 对象本身.(PS:我就是这么理解的感觉逻辑很通.).
链式函数声明 .h 中
#import <Foundation/Foundation.h>
@interface DictionaryChangeController : NSObject
/*!
* set Controller Name
*/
-(DictionaryChangeController *(^)(NSString * ControllerName))controllerName;
/*!
* set Property Dictionary
*/
-(DictionaryChangeController *(^)(NSDictionary * propertys))property;
.m 中实现
- (DictionaryChangeController* (^)(NSString*))controllerName
{
// 可以这么写 return ^(NSString *controllerName) 也没有任何错误节省时间,当然也可以这么写
return ^DictionaryChangeController*(NSString* controllerName)
{
// 这里 controllerName 就是你调用时 () 中传入的参数
return self;
};
}
- (DictionaryChangeController* (^)(NSDictionary*))property
{
// 原理和上一个方法是一样的不做介绍了
return ^DictionaryChangeController*(NSDictionary* propertys)
{
return self;
};
}
具体调用
第一步:我们先创建一个对象.
DictionaryChangeController * controller = [DictionaryChangeController new];
第二步:我们可以使用刚刚定义的两个链式函数了.
controller.controllerName(@"test").property(@{@"key":@"value"});
为了增加可读性我们还可以添加谓词: and . with 等等.
.h
- (DictionaryChangeController *)and;
- (DictionaryChangeController *)with;
.m
- (DictionaryChangeController*) and
{
return self;
}
- (DictionaryChangeController*)with
{
return self;
}
然后我们的调用函数就可以这么写:
你可以用and连接
controller.controllerName(@"test").and.property(@{@"key":@"value"});
也可以用with连接
controller.controllerName(@"test").with.property(@{@"key":@"value"});
链式函数 我比较喜欢这种写法,当然可读性强的前提是,命名一定要见名知意….