将对象转换为类的类型作为参数传递

时间:2013-03-17 14:10:32

标签: iphone objective-c

我想做的是:

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

我正在调用此函数如下:

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

获取编译错误,任何想法是否可以实现?

3 个答案:

答案 0 :(得分:5)

Casting是一个仅编译操作。你不能在运行时强制转换。在运行时,您可以使用isKindOfClass:来确定类。

通常,对动态转换的需求表明代码中存在设计问题。具体来说,您没有正确地利用继承或多态。

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

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

作为所有SpecialView类的方法(或者它可能是抽象的)。

答案 1 :(得分:1)

抱歉,你不能这样做。您可以做的最好的事情是转换为声明的myClass类型。转换不会修改对象,它们只是声明现有对象的已知(检查后)类型。

并且转换为动态类型没有任何优势,因为基于强制转换而发生的所有编译器和JVM检查都是静态的。

答案 2 :(得分:0)

在编译期间发生了强制转换,因此尝试强制转换为在运行时确定的类型(如在Objective-C方法调用中)是不可能的。