Objective c obj-C/Cocoa将未知类(但公共父级)的参数传递给方法。可能的

Objective c obj-C/Cocoa将未知类(但公共父级)的参数传递给方法。可能的,objective-c,cocoa-touch,class,methods,Objective C,Cocoa Touch,Class,Methods,我有一个从UIView定义的类集合 @interface { UIView *thisView UIView *thatView } 现在,假设我想创建一个方法来获取这些对象,调用它们共同的函数,设置共同的参数,做各种未知的事情,如果这些对象属于不同的类(假设它们非常不同),我如何将它们传递给它 …如果有一个公共父类响应您计划发送的消息,则可以按此方式键入变量。否则,您可以创建一个协议来指定公共接口。如果有一个公共父类响应您计划发送的消息,您可以这样键入变量。否则,可以创建指定公共接口的

我有一个从UIView定义的类集合

@interface {

UIView *thisView
UIView *thatView

}

现在,假设我想创建一个方法来获取这些对象,调用它们共同的函数,设置共同的参数,做各种未知的事情,如果这些对象属于不同的类(假设它们非常不同),我如何将它们传递给它


如果有一个公共父类响应您计划发送的消息,则可以按此方式键入变量。否则,您可以创建一个协议来指定公共接口。

如果有一个公共父类响应您计划发送的消息,您可以这样键入变量。否则,可以创建指定公共接口的协议。

如果要使用通用对象,可以检查它们是否响应要执行的消息。然后执行消息

id blah;

if ([blah respondsToSelector:@selector(someMethod:)])
{
    [blah performSelector:@selector(someMethod:) withObject:anObject];
}
以你为例

- (void)exampleMethod:(UIView *)viewNumber //will this suffice?
{
    if ([viewNumber respondsToSelector:@selector(anotherMethod)])
    {
        [viewNumber performSelector:@selector(anotherMethod)];
    }

}

如果要使用泛型对象,可以检查它们是否响应要执行的消息。然后执行消息

id blah;

if ([blah respondsToSelector:@selector(someMethod:)])
{
    [blah performSelector:@selector(someMethod:) withObject:anObject];
}
以你为例

- (void)exampleMethod:(UIView *)viewNumber //will this suffice?
{
    if ([viewNumber respondsToSelector:@selector(anotherMethod)])
    {
        [viewNumber performSelector:@selector(anotherMethod)];
    }

}

两种最常见的做法是:

  • 制作一个子类(
    exampleClass
    ),包含所有“共同点”——方法、属性等,然后将
    thisView
    thatView
    类定义为
    exampleClass
    的子类。然后可以使用
    exampleClass
    作为
    example方法中的参数

  • 创建一个,然后让
    thisView
    thatwiew
    实现协议


  • 这两种技术都是Objective-C(以及面向对象编程)的基础,在您花费大量时间编写代码之前,可能值得进一步了解它们。

    最常见的两种实践是:

  • 制作一个子类(
    exampleClass
    ),包含所有“共同点”——方法、属性等,然后将
    thisView
    thatView
    类定义为
    exampleClass
    的子类。然后可以使用
    exampleClass
    作为
    example方法中的参数

  • 创建一个,然后让
    thisView
    thatwiew
    实现协议


  • 这两种技术都是Objective-C(以及面向对象编程)的基础,在您花费大量时间编写代码之前,可能值得进一步了解它们。

    您的代码不是有效的Objective-C。。。你能把它整理一下让它更有意义吗?如果“父对象关系”是指两个对象共享同一个超类,为什么不让你的方法获取该类的对象而不是
    UIView
    ?你的代码是无效的Objective-C。。。你能把它清理一下让它更有意义吗?如果“父对象关系”是指两个对象共享同一个超类,为什么不让你的方法接受该类的对象而不是
    UIView