• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

objective-c - 当返回值是类型转换的父类时,方法的类型转换返回值?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:12:14 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有类似的代码。

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-推荐答案


如果你完全确定它会返回一个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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap