webdevqa.jp.net

Objective-Cでは、Javaの「instanceof」キーワードと同等のものは何ですか?

オブジェクト(たとえばsomeObject)が別の型の変数(たとえばSpecifiedType)に割り当て可能(キャスト可能)かどうかを確認したいと思います。 Javaでは、次のように書くことができます。

someObject instanceof SpecifiedType

関連する質問は、オブジェクトの実行時の型が別の型と等しいかどうかを見つけることです。 Javaでは、次のように書くことができます。

someObject.getClass().equals(SpecifiedType.class)

これをObjective-Cでどのように行うことができますか?

184
Dimitris

オブジェクトのクラスを返すために[myObject class]を試してください。

以下と正確に比較できます。

if ([myObject class] == [MyClass class])

ただし、直接MyClass識別子を使用することはできません。

同様に、オブジェクトがあなたのクラスのサブクラスであるかどうかを見つけることができます:

if ([myObject isKindOfClass:[AnObject class]])

jon Skeetとzoulが提案したとおり。

258
mouviciel

から ウィキペディア

たとえば、Objective-Cでは、汎用のObjectNSObject(Cocoa/OpenStep内)の両方がメソッドisMemberOfClass:を提供し、メソッドへの引数が指定されたクラスのインスタンスである場合にtrueを返します。引数が指定されたクラスを継承する場合、メソッドisKindOfClass:は同様にtrueを返します。

isKindOfClass:は、その音により、instanceofに最も近くなります。

37
Jon Skeet

NSObject ドキュメントの isKindOfClass: メソッドを参照してください。 (そのような質問に対する通常の警告の言葉は、オブジェクトクラスをチェックすることはしばしば何か間違ったことをしている兆候であるということです。)

9
zoul