我在目标C中非常新,我想知道我想做什么/如何做是可能的。 我有几节课
@interface A: NSObject
{
NSString* Aa;
NSUInteger Ab;
}
@interface B: A
{
NSString* Ba;
NSUInteger Bb;
}
@interface C: A
{
NSString* Ca;
NSUInteger Cb;
}
我想创建一个函数,我希望'A'类型的对象,并在实现中检查它们的类型后来是否为B或C.这就是我想要的:
-(void)doSomething:(A *param)
{
//do some stuff
if(param is an inscance of B)
{
//do stuff with B
}
else
{
//do stuff with C
}
}
怎么做?
此致
佐利
答案 0 :(得分:6)
检查NSObject的方法isKindOfClass:(Class)c 你会这样做:
-(void)doSomething:(A *)param
{
//do some stuff
if([param isKindOfClass:[B class]])
{
//do stuff with B (cast will be required to avoid warnings!)
B *castedB = (B *)param;
//...
}
else if ([param isKindOfClass:[C class]])
{
//do stuff with C
C *castedC = (C *)param;
//...
}
}
希望这有帮助!
答案 1 :(得分:6)
您可能想要使用四种方法:
isKindOfClass:
测试对象是否为类或子类的成员isMemberOfClass:
与上述相同,但更具体,不允许子类respondsToSelector:
测试一个对象是否响应给定的选择器,如[param respondsToSelector:@selector(method:)]
。对鸭子打字很有用。conformsToProtocol:
测试对象是否实现协议。