前段時(shí)間因?yàn)榻?jīng)常遇到數(shù)值的計(jì)算闽巩,本來(lái)用?????。但是遇到精度問題,所以必須得用NSDecimalNumber類徐伐,而使用NSDecimalNumber類計(jì)算很不方便,需要大量的初始化和超長(zhǎng)的方法募狂。如下:
NSDecimalNumber *A = [NSDecimalNumber decimalNumberWithString:@"11.99"];
NSDecimalNumber *B = [NSDecimalNumber decimalNumberWithString:@"22.99"];
NSDecimalNumber *C = [A decimalNumberByAdding:B];
這樣大家明白了办素,其實(shí)我們開發(fā)只需要知道是加減還是乘除魏保,不需要在使用的時(shí)候有這么多的初始化操作。于是摸屠,我便想著封裝起來(lái)。這時(shí)第一個(gè)反應(yīng)就是鏈?zhǔn)骄幊塘肆缓撸勺x性強(qiáng)季二、簡(jiǎn)潔。而鏈?zhǔn)骄幊痰暮诵木褪屈c(diǎn)語(yǔ)法加上返回對(duì)象本身揭措。
既然知道主體思想胯舷,那么開始實(shí)現(xiàn)了,
比如完成 (1+2) x 3
那么大概思路應(yīng)該是有個(gè)Calculation類绊含,Calculation 有四個(gè)屬性“加減乘除”桑嘶,
既然要計(jì)算,每個(gè)屬性肯定有個(gè)入?yún)⒐洌鴮傩韵胝{(diào)用屬性逃顶,那么返回的必須是對(duì)象本身。綜上充甚,那么這個(gè)屬性得是一個(gè)有入?yún)⒑头祷刂档胋lock以政。
按照思路,如下:
add(1).add(2).multiplyingBy(3)
但是為了增加代碼的可讀性和多次計(jì)算應(yīng)該有個(gè)開始和結(jié)束伴找,于是修正版本:
start(1).add(2).multiplyingBy(3).result
下面就該寫屬性了
//.h
typedef MCCalculation*(^CalculateOption)(id);
@property(nonatomic,copy) CalculateOption start;
…
….
//.m
-(CalculateOption)start{
return ^(id inputNum){
if (inputNum ==nil ||
…………….
}
return self;
};
}
最后盈蛮,這樣就實(shí)現(xiàn)一個(gè)鏈?zhǔn)骄幊痰挠?jì)算工具類,其實(shí)鏈?zhǔn)骄幊虘?yīng)用地方有很多技矮,比如Masory自動(dòng)布局庫(kù)等抖誉。