Objective C,如何查询一个对象是否属于某个类
-
25-09-2019 - |
题
我从 TableViewCell 派生。当我查询有关索引路径的表视图时,它返回一个 UITableViewCell。如何查找该对象是否是我的自定义类型“CustomCell”之一?
解决方案
if ([cell isKindOfClass:[CustomCell class]]) {
[(CustomCell*)cell customCellMethod];
}
其他提示
if ([cell isKindOfClass:[CustomCell class]]) {
// ...
}
一如往常,在面向对象的设计,尝试使用实例的阶级身份是一个代码味道,应该提高的标志。究竟什么是你想用你的自定义单元格呢?也许有人可以提出一个更好的办法。
没有母校什么,这是更好的设计依赖比类的接口(在Objective-C说话@protocol
)上,因为它有助于解耦设计。定义与有关API一个@protocol
你需要和你的CustomCell
执行该协议。在你的代码可以再试验:
if([cell conformsToProtocol:@protocol(MyCellProtocol)]) {
//...
}
,而不是测试类的身份。
如果你只需要一个单一的方法,可以使用[cell respondsToSelector:@selector(myMethod)]
。
实际上,您可以在这里使用两种方法。您可能想要的是 isKindOfClass:
, ,但还有另一种方法称为 isMemberOfClass:
这只会返回 YES
如果接收者是所提供类的实例,而不是子类的实例。
例如,如果 DerivedClass
是一个子类 BaseClass
, ,那么这里是每种方法的结果:
BOOL isKind = [aDerivedInstance isKindOfClass:[BaseClass class]]; // YES
BOOL isMember = [aDerivedInstance isMemberOfClass:[BaseClass class]]; // NO
不隶属于 StackOverflow