我想做的是:
- (UIView *)getView:(UIView *)recycledView withClass:(Class)myClass
{
myClass *currentItem = (myClass*)recycledView;
....
}
我正在调用此函数如下:
[self getView:myView withClass:[SpecialView class]];
获取编译错误,任何想法是否可以实现?
答案 0 :(得分:5)
Casting是一个仅编译操作。你不能在运行时强制转换。在运行时,您可以使用isKindOfClass:
来确定类。
通常,对动态转换的需求表明代码中存在设计问题。具体来说,您没有正确地利用继承或多态。
对于这种情况,您可以添加:
+ (UIView*)recyleView:(UIView*)recycledView;
作为所有SpecialView
类的方法(或者它可能是抽象的)。
答案 1 :(得分:1)
抱歉,你不能这样做。您可以做的最好的事情是转换为声明的myClass类型。转换不会修改对象,它们只是声明现有对象的已知(检查后)类型。
并且转换为动态类型没有任何优势,因为基于强制转换而发生的所有编译器和JVM检查都是静态的。
答案 2 :(得分:0)
在编译期间发生了强制转换,因此尝试强制转换为在运行时确定的类型(如在Objective-C方法调用中)是不可能的。