2011-05-06 29 views
0

我想比較兩個字符串使用- (BOOL)isEqualToString:(NSString *)aString 這些字符串是來自字典使用-(id)objectForKey:(id)aKey包含數字字符的對象。NSString可以被當作NSCFDecimal嗎?

當我使用[object class]檢查這些字符串的類,無論我怎樣鑄造他們是NSString *,它不斷出現,他們是NSCFDecimal數量,需要使用==進行比較。如果我想在它們上使用isEqualToString,它會引發錯誤。

任何人都可以解釋爲什麼發生這種情況?

回答

0

Objective-C是高度動態的語言。無論你聲明瞭哪種類型的變量,只有運行時才重要。例如:

NSString *str = [NSNumber numberWithInt:5]; 

str - 是NSNumber。

如果你想比較NSInteger的(對於〔實施例)與字符串,你應該這樣做:

NSInteger num = 9; 
NSString *stringWithNumber = [NSString stringWithFormat:@"%d", num]; 
if ([stringWithNumber isEqualToString:yourString]) 
{ ... } 
+0

沒有按它的意思是鑄造象'的NSString *海峽=(的NSString *)[字典objectForKey:@ 「numberKey」 ];'不會做我打算做的事情? – petershine 2011-05-06 08:07:57

+0

@Peter No;對象的類**從不**因爲類型轉換而改變。你只是想讓編譯器認爲'NSCFDecimal'對象是一個'NSString'對象,但它仍然是一個'NSCFDecimal'對象。 – 2011-05-06 08:25:25

+0

@Bavarious即使對象最初被設置爲字符串時,它被添加到字典?這絕對是使用數字字符的字符串。例如' @「12345」'當使用'objectForKey:(id)aKey'返回時,帶有數字字符的字符串對象是否可以成爲'NSCFDecimal'? – petershine 2011-05-06 08:29:18