program tip

Objective-C에서 객체 유형을 어떻게 테스트합니까?

radiobox 2020. 10. 4. 10:48
반응형

Objective-C에서 객체 유형을 어떻게 테스트합니까?


개체가 유형 NSString인지 또는 UIImageView. 어떻게 할 수 있습니까? 어떤 유형의 "isoftype"메소드가 있습니까?


객체가 myObject이고 그것이인지 확인하기 위해 테스트하려는 경우 NSString코드는 다음과 같습니다.

[myObject isKindOfClass:[NSString class]]

마찬가지로, 테스트하기를 원한다면 myObjectA의 UIImageView:

[myObject isKindOfClass:[UIImageView class]]

당신은 아마 사용할 것입니다

- (BOOL)isKindOfClass:(Class)aClass

이것은의 방법입니다 NSObject.

자세한 내용은 NSObject설명서를 확인하십시오 .

이것이 당신이 이것을 사용하는 방법입니다.

BOOL test = [self isKindOfClass:[SomeClass class]];

이런 식으로 시도해 볼 수도 있습니다.

for(id element in myArray)
{
    NSLog(@"=======================================");
    NSLog(@"Is of type: %@", [element className]);
    NSLog(@"Is of type NSString?: %@", ([[element className] isMemberOfClass:[NSString class]])? @"Yes" : @"No");
    NSLog(@"Is a kind of NSString: %@", ([[element classForCoder] isSubclassOfClass:[NSString class]])? @"Yes" : @"No");    
}

superClass와 inheritedClass를 다르게하려면 다음을 사용할 수 있습니다.

if([myTestClass class] == [myInheritedClass class]){
   NSLog(@"I'm the inheritedClass);
} 
if([myTestClass class] == [mySuperClass class]){
   NSLog(@"I'm the superClass);
} 

- (BOOL)isKindOfClass:(Class)aClass이 경우에 사용 하면 inheritedClass가 일종의 수퍼 클래스이기 때문에 두 번 모두 TRUE가됩니다.


간단한 테스트를 실행하면서 작동하는 것과 그렇지 않은 것을 문서화 할 것이라고 생각했습니다. 종종 사람들이 객체의 클래스가 다른 클래스의 구성원인지 다른 클래스와 같은지 확인하는 것을 봅니다.

아래 줄에는 NSArray, an NSDictionary또는 (null). 수있는 잘못된 형식의 데이터가 있습니다 .

NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];

수행 된 테스트는 다음과 같습니다.

NSLog(@"%@", [hits class]);

if ([hits isMemberOfClass:[NSMutableArray class]]) {
    NSLog(@"%@", [hits class]);
}

if ([hits isMemberOfClass:[NSMutableDictionary class]]) {
    NSLog(@"%@", [hits class]);
}

if ([hits isMemberOfClass:[NSArray class]]) {
    NSLog(@"%@", [hits class]);
}

if ([hits isMemberOfClass:[NSDictionary class]]) {
    NSLog(@"%@", [hits class]);
}

if ([hits isKindOfClass:[NSMutableDictionary class]]) {
    NSLog(@"%@", [hits class]);
}

if ([hits isKindOfClass:[NSDictionary class]]) {
    NSLog(@"%@", [hits class]);
}

if ([hits isKindOfClass:[NSArray class]]) {
    NSLog(@"%@", [hits class]);
}

if ([hits isKindOfClass:[NSMutableArray class]]) {
    NSLog(@"%@", [hits class]);
}

isKindOfClassisMemberOfClass그렇지 않은 동안 오히려 잘 작동했습니다 .


기본 데이터 유형의 유형을 확인하려는 경우 다음 코드를 사용할 수 있습니다.

// Returns 0 if the object type is equal to double
strcmp([myNumber objCType], @encode(double)) 

간단합니다. [yourobject class] 객체의 클래스 이름을 반환합니다.

참고 URL : https://stackoverflow.com/questions/1144629/in-objective-c-how-do-i-test-the-object-type

반응형