關(guān)于鏈?zhǔn)骄幊滔氡卮蠹业谝粋€(gè)想到的就是 Masonry , 至于還不知道鏈?zhǔn)骄幊痰耐? 請(qǐng)自行百度~
在寫之前, 我們先看看以下幾點(diǎn):
/**
* 鏈?zhǔn)骄幊趟枷胩攸c(diǎn): 方法返回值必須是方法調(diào)用者本身
* 用到 block: 把需要操作的的值作為 block 參數(shù), block 也需要返回值, 就是方法調(diào)用者
* 方法設(shè)計(jì): 自己的框架最好添加一個(gè)屬于自己的獨(dú)特前綴
*/
注意了這幾點(diǎn)我們就可以開(kāi)始仿照 Masonry 來(lái)學(xué)習(xí)!
首先我們來(lái)看看 Masonry 的使用, 特殊情況我沒(méi)有把視圖添加到父視圖上, 只是為了看清寫法
Masonry 的使用
內(nèi)部實(shí)現(xiàn)
它在內(nèi)部創(chuàng)建了一個(gè)約束制造者, 然后用 block 接收外部的約束信息, 返回了一個(gè)含有約束的數(shù)組, 我們也可以這樣, 把所有計(jì)算代碼寫在外面用 block 傳進(jìn)來(lái), 作用在一個(gè)計(jì)算機(jī)管理者
manager
上, 我們對(duì)計(jì)算器需要返回的就不是數(shù)組了, 而是一個(gè)int
或者float
還有看名字它是一個(gè)類目, 至于那個(gè)MAS_VIEW
就是作者裝逼用的, 就是對(duì) UIView 寫了一個(gè)宏
.h
#import <Foundation/Foundation.h>
#import "ZWYCalculateManager.h"
@interface NSObject (Calculate)
// 把所有的計(jì)算代碼放在這里
+ (float)zwy_makeCalculate:(void(^)(ZWYCalculateManager *))block;
@end
創(chuàng)建一個(gè)管理者
manager
, import 到這個(gè)類目中
.m
#import "NSObject+Calculate.h"
@implementation NSObject (Calculate)
+ (float)zwy_makeCalculate:(void (^)(ZWYCalculateManager *))block
{
ZWYCalculateManager *manager = [ZWYCalculateManager new];
block(manager);
return manager.result;
}
@end
是不是和 Masonry 很像, 這里我們使用類方法, 是因?yàn)椴恍枰獙?duì)象調(diào)用, 根據(jù)使用者的需求去改就可以, 也可以寫成對(duì)象方法
再來(lái)寫一下我們的管理者
.h
#import <Foundation/Foundation.h>
@interface ZWYCalculateManager : NSObject
@property (nonatomic, assign) float result;
// 下面的創(chuàng)建我們不使用, 因?yàn)檫_(dá)不到鏈?zhǔn)骄幊痰臉幼? 我們需要的是 manager.add(5).add(5) 這樣的鏈?zhǔn)骄幊? 所以需要寫成 block
//- (instancetype)add:(float)value;
// 注意 block 的返回值, 要是方法調(diào)用者本身
- (ZWYCalculateManager *(^)(float))add;
@end
.m
#import "ZWYCalculateManager.h"
@implementation ZWYCalculateManager
- (ZWYCalculateManager *(^)(float))add
{
return ^(float value) {
_result += value;
return self;
};
}
@end
這樣我們就寫完了, 可以去 viewController 中使用一下了:
int result = [NSObject zwy_makeCalculate:^(ZWYCalculateManager *manager) {
// 例如計(jì)算 5 + 5
manager.add(5).add(5);
}];
NSLog(@"%d", result);
看圖
運(yùn)行后的圖
最后, 筆者只是分享思想, 有想要完善加減乘除的客官, 請(qǐng)客官們自行解決~~一定要善于思考!