2013-03-17 78 views
0

我想要做的是:演员对象类是谁的类型作为参数传递

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

我调用这个函数如下:

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

得到一个编译错误,任何想法是否有可能实现这一点?

+5

不要用'get'前缀方法。 'get'用于一个非常具体的角色,这不是它。 – bbum 2013-03-17 15:29:31

+0

@bbum,好点 - 谢谢你! – Shai 2013-03-18 10:15:39

回答

0

转换发生在编译过程中,所以尝试转换为在运行时确定的类型(如在Objective-C方法调用中)是不可能的。

1

对不起,你不能这样做。你可以做的最好的是转换为声明的myClass类型。演员不修改对象,他们只是声明已知(检查后)类型的现有对象。

由于所有基于转换的编译器和JVM检查都是静态的,因此转换为动态类型没有优势。

5

铸造是一个仅编译操作。你不能在运行时施放。在运行时,您可以使用isKindOfClass:来确定课程。

一般来说,动态铸造的需要表明代码中的设计问题。具体来说,你没有正确地使用继承或多态。

对于这种情况,您可以添加:

至于所有SpecialView类的方法(也可能被抽象)。

相关问题