鏈式編程的特點
鏈式編程通過點語法連續(xù)調(diào)用函數(shù),將一系列代碼執(zhí)行動作串聯(lián)起來,讓代碼更加簡潔, 可讀性更強,不用單獨一個一個的執(zhí)行。
Objective-C和Swift代碼寫法上有些差別
Objective-C
對象方法的返回值是一個Block,在返回Block函數(shù)中做相應(yīng)的邏輯處理并返回當前對象Swift
對象方法的返回值是當前對象气嫁,需要操作的值以形參傳入
OC版
CaculateMake 具體方法類
####CaculateMake.h
#import <UIKit/UIKit.h>
@interface CaculateMake : NSObject
/** 結(jié)果 */
@property (nonatomic, assign) CGFloat result;
- (CaculateMake *(^)(CGFloat))add;
- (CaculateMake *(^)(CGFloat))sub;
@end
####CaculateMake.m
#import "CaculateMake.h"
@implementation CaculateMake
- (CaculateMake *(^)(CGFloat))add {
return ^CaculateMake *(CGFloat value) {
self.result += value;
return self;
};
}
- (CaculateMake *(^)(CGFloat))sub {
return ^CaculateMake *(CGFloat value) {
self.result -= value;
return self;
};
}
@end
點語法調(diào)用類
#import <UIKit/UIKit.h>
#import "CaculateMake.h"
@interface Caculate : NSObject
+ (CGFloat)caculate:(void(^)(CaculateMake *make))caculateBlock;
@end
#import "Caculate.h"
@implementation Caculate
+ (CGFloat)caculate:(void (^)(CaculateMake *))caculateBlock {
CaculateMake *make = [[CaculateMake alloc] init];
caculateBlock(make);
return make.result;
}
@end
Swift版
class CaculateMake {
var result: Int = 0
func add(num: Int) -> CaculateMake {
result += num
return self
}
func sub(num: Int) -> CaculateMake {
result -= num
return self
}
}
class Caculate {
static func beginCaculate(caculateBlock: (CaculateMake) -> ()) -> Int {
let caculateMake = CaculateMake()
caculateBlock(caculateMake)
return caculateMake.result
}
}
#### 使用
let n = Caculate.beginCaculate { (make) in
make.add(num: 10).add(num: 20)
}