我有类似的代码。
MySubclassOfUIView *view = [aUIPickerView viewForRow:4 forComponent:0];
UIPickerView 的viewForRow:forComponent 方法返回一个UIView。 MySubclassOfUIView 就是这样:UIView 的子类。
UIPickerView 委托(delegate)(此处未提及)使用 MySubclassOfUIView 对象数组来填充 UIPickerView 组件的行。因此,我知道 viewForRow:forComponent 方法实际上将返回指向 MySubclassOfUIView 类型对象的指针。
Xcode 给了我这个警告。
Incompatible pointer types initializing 'MySubclassOfUIView*' with an expression of type 'UIView*'.
所以我想我会对其进行类型转换以修复警告,这给了我这段代码。
MySubclassOfUIView *view = (MySubclassOfUIView*)[aUIPickerView viewForRow:4 forComponent:0];
警告消失了。
请原谅我摇摇欲坠的 C 和 Objective-C 技能,但我在做正确的事吗(就目前给出的上下文而言)?有没有其他更好的方法来处理这种情况?
Best Answer-推荐答案 strong>
如果你完全确定它会返回一个MySubclassOfUIView ,那么这样做是可以的。如果它有任何可能返回其他内容(例如您犯了错误并将错误的内容添加到数组中),那么您应该检查类型并使用临时变量。
UIView *temp = [aUIPickerView viewForRow:4 forComponent:0];
NSAssert([temp isMemberOfClass:[MySubclassOfUIView class]],[NSString stringWIthFormat"aUIPickerView returned the wrong class (%@)",[temp class]]);
MySubclassOfUIView *theView = (MySubclassOfUIView*)temp;
关于objective-c - 当返回值是类型转换的父类时,方法的类型转换返回值?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/5851314/
|