オブジェクトがObjective-Cの特定のクラスのインスタンスであるかどうかをテストするにはどうすればよいですか?オブジェクトaがクラスbまたはクラスcのインスタンスであるかどうかを確認したい場合は、どうすればよいですか?
オブジェクトがObjective-Cの特定のクラスのインスタンスであるかどうかをテストするにはどうすればよいですか?オブジェクトaがクラスbまたはクラスcのインスタンスであるかどうかを確認したい場合は、どうすればよいですか?
回答:
オブジェクトがクラスaのインスタンスかどうかをテストするには:
[yourObject isKindOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of
// given class or an instance of any class that inherits from that class.
または
[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a
// given class.
オブジェクトのクラス名を取得するには、NSStringFromClass
関数を使用できます。
NSString *className = NSStringFromClass([yourObject class]);
またはObjective-CランタイムAPIのC関数:
#import <objc/runtime.h>
/* ... */
const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);
編集: In Swift
if touch.view is UIPickerView {
// touch.view is of type UIPickerView
}
class_getName
以上を使用する利点は何NSStringFromClass
ですか?ない場合は、この回答を調整する必要があります。
あなたも使うことができます
NSString *className = [[myObject class] description];
NSObject
AppleドキュメントのisKindOfClassの意味
クラスクラスターで表されるオブジェクトでこのメソッドを使用するときは注意してください。クラスクラスターの性質上、返されるオブジェクトは必ずしも期待したタイプとは限りません。クラスクラスターを返すメソッドを呼び出す場合、メソッドによって返される正確な型が、そのオブジェクトで何ができるかを示す最良の指標です。たとえば、メソッドがNSArrayオブジェクトへのポインタを返す場合、次のコードに示すように、このメソッドを使用して配列が変更可能かどうかを確認しないでください。
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
このような構造をコードで使用する場合、実際には変更してはならないオブジェクトを変更しても大丈夫だと思うかもしれません。そうすると、オブジェクトが変更されないままであると期待していた他のコードで問題が発生する可能性があります。
-isKindOfClass:
&-isMemberOfClass:
クラスクラスタ内のオブジェクトを識別するために使用すべきではありません。
特定のクラスをチェックしたい場合は、
if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}
クラスの名前を取得したい場合は、以下を呼び出します。
id yourObject= [AnotherClass returningObject];
NSString *className=[yourObject className];
NSLog(@"Class name is : %@",className);