2011-05-06 3 views
0

두 문자열을 비교하려면 - (BOOL)isEqualToString:(NSString *)aString 이 문자열은 숫자가 포함 된 -(id)objectForKey:(id)aKey을 사용하는 사전의 개체입니다.NSString을 NSCFDecimal로 처리 할 수 ​​있습니까?

내가 [object class]를 사용하여 이러한 문자열 클래스를 검사 할 때, 아무리 내가 그들을 주조 그들이 어떻게 ==을 사용하여 비교 할 필요 NSCFDecimal 수 있다는 NSString *, 그것을 보여주는 유지를 할 수 없습니다. isEqualToString을 사용하려면 오류가 발생합니다.

왜 이런 일이 일어 났는지 설명 할 수 있습니까?

답변

0

Objective-C는 매우 동적 인 언어입니다. 어떤 유형의 변수를 선언하든 관계없이 런타임 문제 만 있습니다. 예 :

NSString *str = [NSNumber numberWithInt:5]; 

str -은 NSNumber입니다.

당신이 문자열 (exmaple에 대한)이 같은해야 NSInteger을 비교하려면

는 :

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

이'는 NSString * str을 = (있는 NSString *) [사전 objectForKey 같은 주조 의미 아무튼 : @ "numberKey" ]; '내가 의도 한대로하지 않을 것인가? – petershine

+0

@Peter No; 객체의 클래스 **는 ** 형 변환 때문에 절대로 ** 변경되지 않습니다. 'NSCFDecimal' 객체가'NSString' 객체라고 생각하도록 컴파일러를 속일 뿐이지 만 여전히 NSCFDecimal 객체입니다. –

+0

@Bavarious 오브젝트가 원래 사전에 추가 될 때 문자열로 설정 되더라도? 그것은 숫자로만 된 문자열을 사용하는 것입니다. '. @ "12345"'objectForKey : (id) aKey'를 사용하여 문자열 객체를 숫자로 반환하면 NSCFDecimal이 될 수 있습니까? – petershine