任何突出显示iOS Objective-C项目中对象的运算符比较的方法

时间:2018-01-17 15:29:20

标签: ios objective-c operator-overloading operators

最近在一个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中的运算符,我尝试了两种不同的方法来实现这一点:

  1. 创建NSDecimalNumber的快速扩展,其中我重载这些运算符(在swift中可以覆盖标准运算符),然后通过Swift桥在我的Obj-c环境中使用这些新方法。经过一些测试并且在StackOverflow上有很多红色,似乎这种方法是不可能的,因为Obj-C总是以常用的方式处理标准运算符(比较对象的地址)
  2. 为NSDecimalNumber创建一个类别,其中我通过C ++重载这些运算符,它提供了将运算符重载到程序员的选项。这里的问题是我对C ++没有信心,我找不到任何例子来解决我。
  3. 所以最后我需要一种方法来突出用标准运算符制作的对象之间的任何比较

    非常感谢任何帮助,

    感谢。

0 个答案:

没有答案