私は、オブジェクトが型であるかどうかをテストする必要がありますNSStringかUIImageView。どうすればこれを達成できますか?「isoftype」メソッドのタイプはありますか?
私は、オブジェクトが型であるかどうかをテストする必要がありますNSStringかUIImageView。どうすればこれを達成できますか?「isoftype」メソッドのタイプはありますか?
回答:
オブジェクトがmyObjectであり、それがであるかどうかをテストする場合NSString、コードは次のようになります。
[myObject isKindOfClass:[NSString class]]同様に、あなたがテストmyObjectしたい場合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で動作する場合と動作しない場合がありますが、iOSでは動作しないため、この目的での使用は想定されていません。また、これらNSLogのsは、あなたが意図したとおりには機能しません。実際の要素のクラスではなく、クラス名(常に文字列)とコーダークラスを奇妙にチェックしています。
                    NSLog(@"Is of type: %@", [element class]);  するには、iOS 7で動作します
                    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になります。
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なかったがかなりうまくいった。
単純な、[yourobject class]は、yourobjectのクラス名を返します。
Classオブジェクトを返します。ただし、descriptionこのオブジェクトのは文字列としてのクラス名になるため、引き続きコンソールに記録できます。
                    
[object isKindOfClass:[ClassName class]]