为什么用 viewWithTag 投射时没有警告?

Why there is no warning while casting with viewWithTag?

例如,

UIImageView *iconView = [cell.contentView viewWithTag:TestTag];

我记得以前如果不显式转换类型会有警告,但现在Xcode不显示了,我的Xcode版本是7.1.1,是那是一个新功能还是我修改了一些配置?谁能告诉我为什么?

Objective-C、__kindof 中新增了 (Xcode 7) 关键字,可让您更好地表达方法的 return 价值。而不是 viewWithTag: returning UIView *,它可以 return __kindof UIView * 告诉编译器类似的东西:

Accept any implicit downcast of the return type if the type is a UIView or a subclass of UIView.

因为 UIImageViewUIView 的子类,所以不需要显式转换。另一方面,以下代码行将导致编译器错误,因为 NSDate 不是 UIView 的子类:

NSDate *date = [cell.contentView viewWithTag:TestTag];