【问题标题】:Why NSDecimalNumber in a NSString?为什么在 NSString 中使用 NSDecimalNumber?
【发布时间】:2012-02-25 17:33:13
【问题描述】:

我有一个对象被解析为NSString,当我找到类名时,它显示NCDecimalNumber。为什么? (我知道NSString 是一个集群,但仍然不明白为什么NSDecimalNumber 会成为集群背后的一部分)

以下帖子提出了类似的问题,但没有人回答原因。 Converting NSDecimalNumber to NSString

【问题讨论】:

  • 你有重现这种情况的代码吗?
  • 您可以在解析带有值的 JSON 时复制它,并且您获得的对象类似于我上面列出的帖子链接。之后,如果您访问该值(通过 objectForKey)并将其保存到 NSString 中(例如变量名称“value”,如果您追踪 [value class],您将获得 NSDecimalNumber

标签: objective-c cocoa nsstring nsnumber


【解决方案1】:

这听起来像是解码器将数字解码为NSDecimalNumber(并将字符串解码为NSStrings)。

请记住,Objective-C C,因此您可以有效地将任何内容分配给指针,这取决于您确保类型对应。这就是为什么您可以将NSNumber 类型的对象分配给声明为NSString* 类型的指针的原因。如您所见,类簇与此无关。

因此,在将对象分配给变量之前,您应该检查类,或者将对象分配给 id 类型的指针(可以保存任何对象)。

如果您需要根据对象类型处理对象,您可以执行以下操作:

id obj = //...

if ( [obj isKindOfClass: [NSString class]] ) {

}
else if ( [obj isKindOfClass: [NSNumber class]] ) {

}
else {

}

【讨论】:

    【解决方案2】:

    尝试使用这个:

    NSString *string = [[NSStrig alloc] initWithFormat:@"%@", [DecimalNumber stringValue]];
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多