在 NSDictionary 中设置值时,@"1.5" 和 @(1.5) 有什么区别?

What is the difference between @"1.5" and @(1.5) while setting the value in NSDictionary?

在iPhone项目中,

当时我正在设置字典中的值,

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)?

你有两个问题,最好是一个问题。

但至于区别,@"2.5" 是一个 NSString,而 @(2.5) 是一个 NSNumber。文本数据和数字数据有很大的区别。

至于为什么需要 NSNumber 而不是 NSString 很明显:字距调整是一个数值。

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

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

您也可以将 NSNumber 对象引用为 @"" 字符串,但不能像上面的示例那样进行计算。在你的情况下,两者都是可以接受的,但这里的计算会有所不同。

当你使用

@"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"];

@(2.8) 是一种 NSNumber。

@"2.8" 是一种 NSString。

两者的类型和值都不一样。