1. ホーム
  2. objective-c

[解決済み] Objective-C Runtime: クラスがプロトコルに準拠しているかどうかを確認する最良の方法は?

2022-04-22 07:38:56

質問

クラス(インスタンスはない)があり、それがあるプロトコルに適合しているかどうかを知る必要があります。しかし、Classは何度もサブクラス化することができ、class_conformsToProtocol()はスーパークラスで宣言されたプロトコルを無視することができます。

class_getSuperclass()を使って、スーパークラスがnilになるまで、階層内のすべてのクラスを再帰的にチェックすることもできますね。しかし、それは深くネストされたクラス階層では非効率的かもしれませんし、多分それを行うためのより良い方法があるのではと思います。

つまり、NSObjectのメソッドconformsToProtocolをObjective-Cのランタイムメソッドで実装し、スーパークラスでプロトコルを検出するにはどうすればよいのでしょうか。

 [myObject conformsToProtocol:@protocol(MyProtocol)];

もし私が再帰的にクラス階層を上がっていくという正しい道を歩んでいるのであれば、教えてください。

どのように解決するのですか?

ドキュメントによると ,

[MyClass conformsToProtocol:@protocol(MyProtocol)];

は動作するはずです。