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