3 分钟 阅读
iOS中的链式编程
链式编程
提到链式编程,在Objective-C中最典型的代表就是Masonry了,比较完美的实现了函数式和链式编程。 链式编程一般就是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)
特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)
例子
我们想要调用一个类对象中的两个方法,正常的实现方式是: Objective-C:
NormalClass.h
#import <Foundation/Foundation.h>
@interface NormalClass : NSObject
- (void)fun1: (NSString *)param;
- (void)fun2: (NSString *)param;
@end
NormalClass.m
#import "NormalClass.h"
@implementation NormalClass
- (void)fun1: (NSString *)param {
NSLog(@"normal fun1: %@", param);
}
- (void)fun2: (NSString *)param {
NSLog(@"normal fun2: %@", param);
}
@end
调用如下:
NormalClass *normal = [NormalClass new];
[normal fun1: @"param1"];
[normal fun2: @"param2"];
正常输出:
normal fun1: param1
normal fun2: param2
如果要用链式来实现呢,可以这样写:
ChainClass.h
#import <Foundation/Foundation.h>
@interface ChainClass : NSObject
@property (copy, nonatomic) void (^actionBlock)(NSString *param);
- (ChainClass * (^)(NSString *param))fun1;
- (ChainClass * (^)(NSString *param))fun2;
@end
ChainClass.m
#import "ChainClass.h"
@implementation ChainClass
- (ChainClass * (^)(NSString *param))fun1 {
return ^(NSString *param) {
NSLog(@"chain fun1: %@", param);
return self;
};
}
- (ChainClass * (^)(NSString *param))fun2 {
return ^(NSString *param) {
NSLog(@"chain fun2: %@", param);
return self;
};
}
@end
调用如下:
ChainClass *chain = [ChainClass new];
chain.fun1(@"param1").fun2(@"param2");
正常输出:
chain fun1: param1
chain fun2: param2
链式调用在Swift里实现起来就简单很多, 如下 Swift:
import Foundation
class ChainClass: NSObject {
var fun1 : (String) -> ChainClass {
return {
NSLog("chain fun1: %@", $0)
return self
}
}
var fun2 : (String) -> ChainClass {
return {
NSLog("chain fun2: %@", $0)
return self
}
}
}
调用如下:
ChainClass().fun1("param1").fun2("param2")
正常输出:
chain fun1: param1
chain fun2: param2
Comments