如何将方法与不同的参数组合?

时间:2010-07-14 13:44:41

标签: objective-c class methods

我有四种主要方法:

+ (NSArray *)findAll;
+ (NSArray *)findAllWithOrder:(NSArray *)order;
+ (NSArray *)findAllWithConditions:(NSDictionary *)conditions;
+ (NSArray *)findAllWithLimit:(NSRange)limit;

此外,我想结合这些方法(例如,我可以按顺序和条件find all)。目前我正在做(所有可能性甚至是以不同的顺序参数,这里没有显示):

+ (NSArray *)findAll;
+ (NSArray *)findAllWithOrder:(NSArray *)order;
+ (NSArray *)findAllWithConditions:(NSDictionary *)conditions;
+ (NSArray *)findAllWithLimit:(NSRange)limit;
+ (NSArray *)findAllWithOrder:(NSArray *)order conditions:(NSDictionary *)conditions;
+ (NSArray *)findAllWithOrder:(NSArray *)order limit:(NSRange)limit;
+ (NSArray *)findAllWithConditions:(NSDictionary *)conditions limit:(NSRange)limit;
+ (NSArray *)findAllWithOrder:(NSArray *)order conditions:(NSDictionary *)conditions limit:(NSRange)limit;

但有没有比为此创建数十种方法更简单的方法?那肯定很不错。感谢。

4 个答案:

答案 0 :(得分:3)

使用包含所有参数(findAllWithOrder:conditions:limit:)并使用nil标识未使用的参数(或者,如果是NSRange,{ NSNotFound, 0 }

答案 1 :(得分:2)

在我看来,Apple实现这一目标的方式是在Obj-C中实现这一目标的最佳方式之一:

定义一个包含options字典或位掩码的catch-all方法,然后在基于字典或位掩码的方法中包含逻辑,执行相应的代码。

答案 2 :(得分:0)

不,这就是你做的方式。我敢肯定有人可以找到方法来创建几十种类似的方法,但它们很少使用。对于Obj-C(特别是Cocoa)对象来说,大量的方法只是略有不同,这是很常见的。

答案 3 :(得分:0)

对我而言,它看起来像是Builder设计模式(http://en.wikipedia.org/wiki/Builder_pattern

的候选者

使用方法创建ie Finder类:

-(void)searchOrder:(NSArray *)order;

-(void)searchCondition(NSDictionary *)conditions;

等等......这些方法将对象的成员设置为您在这些方法中传递的值。

这些方法是可选的,因此你可以调用(在Finder类的对象上)没有(在你的情况下像+ (NSArray *)findAll;这样的最终效果)或其中一些。

最后,您调用了Finder的对象方法,即-(NSArray *)find;,并且您有结果。