如何将参数数量未知的选择器传递给目标 C 中的方法



我有几个方法做几乎相同的事情,唯一的区别是它们使用的选择器,它作为参数传递。但是选择器使用不同数量的参数,从 0 到 2 肆虐,这些参数也作为参数传递。它看起来像这样(SupportClass 是一个类,我从中调用一个要在随机方法中使用的方法):

-(void) RandomMethod: (SEL) selector {
// some actions here
[SupportClass performSelector:selector];
}
-(void) RandomMethod2: (SEL) selector withObject: object {
// the same actions here
[SupportClass performSelector:selector withObject: object];
}
-(void) RandomMethod2: (SEL) selector withObject1: object1 withObject2: object2 {
// again - the same actions
[SupportClass performSelector:selector withObject1: object1 withObject2:object2];
}

但是由于它们都做同样的事情,我想找到一个更通用的解决方案,可以将其压缩为一种方法,这也使我能够将其用于具有更多参数的选择器(我很可能不需要,但仍然我想它会看起来不错)。有谁知道如何做到这一点,并愿意告诉我?

与其传递选择器 + 参数,不如传递代码块。您的代码似乎是完成块的完美示例。

例:

- (void)someMethodWithCompletionBlock:(void(^)())completionBlock {
   //do something
   completionBlock();
}
[myObject someMethodWithCompletionBlock:^{
    [SupportClass performSelector:selector];
};

块解决方案似乎是最好的,

您还可以修改方法,使其仅接收 NSDictionary 作为唯一参数,并使用此 NSDictionary 传递数据

  • void)methodA:(NSDictionary *)data;

  • void)methodB:(NSDictionary *)data;

是最好的方法。

另一种通用解决方案是使用 forwardInvocation: .您不是实现这些方法,而是在某个代理对象上实现forwardInvocation:,然后调用者像平常一样在此代理对象上调用他们想要调用的方法(即它们不会分离选择器等。他们假装这个对象有这些方法,并用参数调用该方法。然后在forwardInvocation:中,它可以调用SupportClass上的调用。

最新更新