0

私がやりたいことは次のとおりです。

- (UIView *)getView:(UIView *)recycledView withClass:(Class)myClass
{
     myClass *currentItem = (myClass*)recycledView;
     ....
}

この関数を次のように呼び出しています。

[self getView:myView withClass:[SpecialView class]];

コンパイルエラーが発生しましたが、これを達成できるかどうかのアイデアはありますか?

4

3 に答える 3

5

キャストはコンパイルのみの操作です。実行時にキャストすることはできません。isKindOfClass:実行時に、クラスを決定するために使用できます。

一般に、動的キャストが必要な場合は、コードに設計上の問題があることを示しています。具体的には、継承またはポリモーフィズムを正しく活用していません。

この場合、次を追加できます。

+ (UIView*)recyleView:(UIView*)recycledView;

すべてのSpecialViewクラスへのメソッドとして (または抽象化されている可能性があります)。

于 2013-03-17T15:34:03.187 に答える
1

申し訳ありませんが、それはできません。最善の方法は、myClass の宣言された型にキャストすることです。キャストはオブジェクトを変更しません。既存のオブジェクトの既知の (チェック後に) 型を宣言するだけです。

また、キャストに基づいて発生するすべてのコンパイラおよび JVM チェックは静的であるため、動的型にキャストする利点はありません。

于 2013-03-17T14:20:18.107 に答える
0

キャストはコンパイル中に発生するため、(Objective-C メソッド呼び出しのように) 実行時に決定される型にキャストしようとすることは不可能です。

于 2013-03-17T14:19:08.340 に答える