Objective c 如何检测a类参数的来源
我有两个类,类A和类B。它们都可以在控制器中调用相同的方法。他们调用的方法采用Objective c 如何检测a类参数的来源,objective-c,oop,Objective C,Oop,我有两个类,类A和类B。它们都可以在控制器中调用相同的方法。他们调用的方法采用CGPoint。我有没有办法确定这个论点来自哪一类 我已尝试使用以下方法: if ([point isKindOfClass:[_territoryPaths class]]) { NSMutableDictionary *territoryPaths = [_territoryPaths territoryPaths]; } if ([piont class] == [_territoryPaths cla
CGPoint
。我有没有办法确定这个论点来自哪一类
我已尝试使用以下方法:
if ([point isKindOfClass:[_territoryPaths class]])
{
NSMutableDictionary *territoryPaths = [_territoryPaths territoryPaths];
}
if ([piont class] == [_territoryPaths class])
{
NSMutableDictionary *territoryPaths = [_territoryPaths territoryPaths];
}
point
是该方法采用的CGPoint
。如果要在非ClassA或ClassB的类中使用此方法,最好的方法是修改方法,使其接受发送方,并对发送方值执行isKindOfClass
例如:
- (void)someMethod:(id)sender withPoint:(CGPoint)point
{
if ([sender isKindOfClass:[ClassA class]])
{
// Do class A stuff
}
else if ([sender isKindOfClass:[ClassB class]])
{
// Do class B stuff
}
else
{
// Unknown class
}
}
如果您想在非ClassA或ClassB的类中使用此方法,那么处理这种情况的最佳方法是修改您的方法,使其接受发送方并对发送方值执行isKindOfClass 例如:
- (void)someMethod:(id)sender withPoint:(CGPoint)point
{
if ([sender isKindOfClass:[ClassA class]])
{
// Do class A stuff
}
else if ([sender isKindOfClass:[ClassB class]])
{
// Do class B stuff
}
else
{
// Unknown class
}
}
除了调用堆栈中的一些非常古怪的技巧(如果可能的话),您需要以某种方式传递调用方的ID。您的目标是什么?这听起来是个糟糕的设计。但是,在提供一个好的解决方案之前,还需要了解更多。(请注意,CGPoint不是一个对象,只是一个结构,它通常是通过显式指针直接传递的。)除了调用堆栈的一些非常古怪的技巧(如果可能的话),您需要以某种方式传递调用方的ID。您的目标是什么?这听起来是个糟糕的设计。但在提供一个好的解决方案之前,还需要了解更多。(请注意,CGPoint不是一个对象,只是一个结构。它通常是通过显式指针直接传递的。)请注意,一般来说,使用
isKindOfClass:
在实现行为之间切换是糟糕设计的标志。一个更好的解决方案是使ClassA
和ClassB
都实现所需的方法,或者两个类都是从一个抽象超类中固有的,这个抽象超类会删除相应的方法。您完全正确。感谢您添加了我忘记提到的内容。请注意,一般来说,使用是类的一种:
在实现行为之间切换是糟糕设计的标志。一个更好的解决方案是使ClassA
和ClassB
都实现所需的方法,或者两个类都是从一个抽象超类中固有的,这个抽象超类会删除相应的方法。您完全正确。谢谢你添加我忘了提到的内容。