2012-02-25 2 views
0

У меня есть объект, который разобрался в NSString, и когда я прослежу название класса, он говорит NCDecimalNumber. Зачем? (Я понимаю, что NSString - это кластер, но до сих пор не понимаю, почему NSDecimalNumber будет частью того, что находится за кластером)Почему NSDecimalNumber в NSString?

Следующий пост задает аналогичный вопрос, но никто не отвечает на вопрос почему. Converting NSDecimalNumber to NSString

+3

У вас есть код, который воспроизводит ситуацию? – Monolo

+0

Вы можете дублировать это, когда вы разбираете JSON со значением в нем, и объект, который вы получаете, похож на ссылку, указанную выше. После этого, если вы получите доступ к значению (через objectForKey) и сохраните его в NSString (скажем, имя переменной "value", вы получите NSDecimalNumber, если вы выделите [value class] – Boon

ответ

2

Звучит так, как будто декодер декодирует номер в NSDecimalNumber (и строки в NSString).

Помните, Objective-C is 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]]; 

Надежда, что собирается помочь вам.

Смежные вопросы