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 回答