17

次のように、特定のプロトコルに応答する Class プロパティを定義できることを知っています。

Class <MyProtocol> class = [object class];

しかし、Objective-C で Class 型をクラスにキャストする方法はありますか?

Class unknownClass = [object class];
[((MyClass)unknownClass) myMethod]; // How can I cast Class to MyClass?
4

2 に答える 2

6

あなたが求めていることは、実際には意味がありません。

unknownClassクラスオブジェクトを指します。Classクラスオブジェクトへの任意のポインタを保持できる型です。クラスオブジェクトにメッセージを送信して、クラスメソッドを呼び出します。

Classのようidに、静的型チェックをオフにします。これは、オブジェクトがメソッドに応答しない可能性があることをコンパイラが文句を言わないことを意味します。だからあなたはそれにメッセージを送るべきです。「キャスト」は意味がありません。このメソッドを宣言するインターフェースがないというエラーが発生した場合は、型とは関係のない完全に無関係な問題が発生します。代わりに、メソッドは表示されているヘッダーで宣言されていません。

別の回答へのコメントで、「「unknownClass」は実際にはMyClassタイプであることを知っています」と言います。それはあなたの質問をさらに意味のないものにします-なぜそれからMyClass直接使用しないのですか?unknownClass?の代わりに 好き[MyClass myMethod];

于 2013-03-21T19:24:35.490 に答える
-2
obj->isa = [NewClass class];

これにより、オブジェクトのクラスが変更されます。

そうするとき、私はあなたが何をしているのか知っていると信じています。

于 2013-03-21T17:38:50.460 に答える