オブジェクトのタイプを確認したい。どうやってやるの?
シナリオは、オブジェクトを取得しています。そのオブジェクトがタイプAの場合、いくつかの操作を実行します。タイプBの場合、いくつかの操作を行います。現在、オブジェクトのタイプはAおよびBの親であるCです。
私は2つのクラスAViewController
とBViewController
を持っています。 UIViewController
にあるオブジェクト。オブジェクトがAViewController
であるかBViewController
であるかを確認する方法は?
if([some_object isKindOfClass:[A_Class_Name class]])
{
// do somthing
}
NSObjectには、クラスをチェックできるメソッドがいくつかあります。
最初に、オブジェクトのクラスを返す-class
があります。これにより、AViewControllerまたはBViewControllerが返されます。
次に、-isKindofClass:
とisMemberOfClass:
の2つのメソッドがあります。
-isKindOfClass:
は、レシーバーを引数として渡されたクラスと比較し、クラスが同じタイプまたは指定されたクラスのサブクラスであるかどうかに基づいてtrueまたはfalseを返します。
-isMemberOfClass:
は、引数として渡されたクラスとレシーバーを比較し、クラスが指定されたクラスと厳密に同じクラスであるかどうかに基づいてtrueまたはfalseを返します。
Objective-Cのより一般的なパターンは、目的のメソッドにオブジェクトが応答するかどうかを確認することです。例:
if ([object respondsToSelector:@selector(length)]) {
// Do something
}
if ([object conformsToProtocol:@protocol(NSObject)]) {
// Do something
}