最近在一个iOS项目中,我已经将货币数据类型从双重重构为NSDecimalNumber,以消除因双打处理货币而导致的差异。
重构已经完成,但我担心的是所有那些通过标准运算符进行的比较,这些比较不会被编译器引发错误,因为比较对象仍然有效(比较内存地址)但逻辑上不正确
double a = 4;
double b = 3;
if(a > b) do stuff //valid and logically correct
NSDecimalNumber *a = [NSDecimalNumber decimalNumberWithString:@"4"];
NSDecimalNumber *b = [NSDecimalNumber decimalNumberWithString:@"3"];
if(a > b) do stuff //valid but not logically correct as here the memory addresses of variables will be compared instead of values.
有没有办法让编译器突出显示这些情况? 我的第一个想法是为NSDecimalNumber创建一个类别并重载运算符,以便它们能够正常工作,并且由于无法覆盖Obj-C中的运算符,我尝试了两种不同的方法来实现这一点:
所以最后我需要一种方法来突出用标准运算符制作的对象之间的任何比较。
非常感谢任何帮助,
感谢。