私は、オブジェクトが型であるかどうかをテストする必要があります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]]