我想使用NSNumber进行简单的计算。
例如:
int a;
a=a*10;
a=a+1;
NSLog(@"%d",a);
如果我声明了一个变量,该如何做相同的事情?
NSNumber *a;
我希望使用NSNumber实现与我使用整数实现的相同逻辑。 谢谢。
我想使用NSNumber进行简单的计算。
例如:
int a;
a=a*10;
a=a+1;
NSLog(@"%d",a);
NSNumber *a;
在NSNumber
上执行数学运算没有明确的支持。 NSNumber
用于包装原始类型数字。(例如,将其用于存储在数组/字典中)
如果您有一个NSNumber
实例并且想进行数学运算,您应该将其值提取为原始类型:
int num = [numberInstance intValue];
num += 1; // Just for the example;
完成后,您需要创建一个新实例来存储新值(因为 NSNumber
是不可变的,所以您不能使用旧的 NSNumber
实例)。
numberInstance = [NSNumber numberWithInt:num];
NSNumber对象中的乘法和加法过程非常困难。
将其转换为int值以执行操作,然后再将其转换回NSNumber对象。
这里是所需代码:
NSNumber *a;
int b = [a intValue];
b = b * 10;
b = b + 1;
a = [NSNumber numberWithInt:b];
NSNumber是任何通用整数类型的包装类。为了进行算术运算,您必须获取要进行算术运算的数据的原始类型,然后执行算术运算,然后再将其重新包装在NSNumber
中。
以下是将数字乘以5
并加上4
的示例:
NSNumber *num = // get this somewhere
num = @(num.intValue * 5 + 4);
-addInt
等方法,但我个人喜欢使用如下的宏:#define NSNumberAddInt(num, i) num = @( num.intValue + i )
#define NSNumberMultiplyInt(num, i) num = @( num.intValue * i )
#define NSNumberMultiplyAddInt(num, i, j) num = @(num.intValue * i + j)
实际上,我有一些更复杂的宏,实际上声明了内联函数:
#define NSNumberDeclareAddType(type, utype) \\
inline NSNumber *NSNumberAdd ## utype ( NSNumber *inNum, type i ) {
return @( inNum. type ## Value + i );
}
#define NSNumberDeclareMultiplyType(type, utype) \\
inline NSNumber *NSNumberMultiply ## utype ( NSNumber *inNum, type i ) {
return @( inNum. type ## Value * i );
}
#define NSNumberDeclareMultiplyAddType(type, utype) \\
inline NSNumber *NSNumberMultiplyAdd ## utype ( NSNumber *inNum, type i, type j ) {
return @( inNum. type ## Value * i + j );
}
#define NSNumberDecalreArithmeticType(type, utype) NSNumberDeclareAddType(type, utype) \\
NSNumberDeclareMultiplyType(type, utype) \\
NSNumberDeclareMultiplyAddType(type, utype)
和
NSNumberDecalreArithmeticType(int, Int)
NSNumberDecalreArithmeticType(float, Float)
NSNumberDecalreArithmeticType(double, Double)
当然,理论上可以使用c++模板来简化这个过程,但我不是c++大师(事实上我一般也不是大师),所以我不想发布任何c++代码。