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