객체가 유형 NSString
인지 또는 인지 테스트해야합니다 UIImageView
. 어떻게하면됩니까? "isoftype"방식이 있습니까?
객체가 유형 NSString
인지 또는 인지 테스트해야합니다 UIImageView
. 어떻게하면됩니까? "isoftype"방식이 있습니까?
답변:
객체가 myObject
이고 객체인지 테스트하기를 원한다면 NSString
코드는 다음과 같습니다.
[myObject isKindOfClass:[NSString class]]
마찬가지로, 테스트하기를 원한다면 myObject
A의 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");
}
className
. OS X에서 작동하거나 작동하지 않을 수 있지만 iOS가 아니므로이 용도로 사용되지 않습니다. 또한, 그것들 NSLog
은 내가 의도 한 바를 따르지 않습니다. 실제로 실제 요소의 클래스 대신 클래스 이름 (항상 문자열)과 코더 클래스를 확인하고 있습니다.
NSLog(@"Is of type: %@", [element class]);
iOS 7에서 작동합니다
수퍼 클래스와 상속 된 클래스를 다르게하려면 다음을 사용할 수 있습니다.
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 두 번을 초래할 것입니다.
isMemberOfClass:
NO
서브 클래스를 다룰 때 반환 됩니다.
간단한 테스트를 수행하면서 작동하는 것과 작동하지 않는 것을 문서화 할 것이라고 생각했습니다. 종종 사람들이 객체의 클래스가 다른 클래스의 멤버인지 또는 다른 클래스와 같은지 확인하기 위해 확인합니다.
아래의 라인을 위해, 우리는 할 수있는 몇 가지 잘못 형성된 데이터가 NSArray
, 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]);
}
isKindOfClass
isMemberOfClass
그렇지 않은 동안 오히려 잘 작동했습니다 .
[object isKindOfClass:[ClassName class]]