在NSDictionary中设置值时,@“1.5”和@(1.5)之间有什么区别?

时间:2016-10-08 07:54:47

标签: ios objective-c iphone nsmutabledictionary

在iPhone项目中,

当我在字典中设置Value时,

NSMutableDictionary*dictionary=[[NSMutableDictionary alloc] init];
        [dictionary setValue:@(2.8) forKey:@"Why"];

NSMutableDictionary*dictionary=[[NSMutableDictionary alloc] init];
        [dictionary setValue:@"2.8" forKey:@"Why"];

我的问题是为什么不是@“2.5”和@(2.5)?

4 个答案:

答案 0 :(得分:4)

你有两个问题,最好只提出一个问题。

但至于差异,@"2.5"NSString,其中@(2.5)NSNumber。文本和数字数据之间存在很大差异。

至于为什么你需要一个NSNumber而不是NSString是显而易见的:字距调整是一个数值。

答案 1 :(得分:2)

使用@()语法可以装入任意C表达式。这使得将基本算术计算转换为NSNumber个对象变得微不足道,如下所示:

double x = 24.0;
NSNumber *result = @(x * .15);
NSLog(@"%.2f", [result doubleValue]);

您也可以将NSNumber对象称为@“”字符串,但无法进行上述示例计算。在你的情况下,两者都是可以接受的,但这里的计算有所不同。

答案 2 :(得分:0)

使用时

@“2.5”它的行为就像一个字符串

NSMutableDictionary*dictionary=[[NSMutableDictionary alloc] init];
  [dictionary setValue:@"2.8" forKey:@"Why"];;
  NSString *a =   [dictionary ValueforKey:@"Why"];

但是当你使用@(2.8)时,它的行为就像一个NSNumber

NSMutableDictionary*dictionary=[[NSMutableDictionary alloc] init];
  [dictionary setValue:@(2.8) forKey:@"Why"];;
  NSNumber *a =   [dictionary ValueforKey:@"Why"];

答案 3 :(得分:0)

@(2.8)是一种NSNumber。

@" 2.8"是一种NSString。

两者之间的类型和价值都不同。