Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何检测a类参数的来源_Objective C_Oop - Fatal编程技术网

Objective c 如何检测a类参数的来源

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

我有两个类,类A和类B。它们都可以在控制器中调用相同的方法。他们调用的方法采用
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
都实现所需的方法,或者两个类都是从一个抽象超类中固有的,这个抽象超类会删除相应的方法。您完全正确。谢谢你添加我忘了提到的内容。