2011-04-28 57 views
0

将BOOL列表传递给objective-c中的方法的最简单方法是什么? (即不必使用NSNumber在NSArray中设置条目来包装它们)。将BOOL列表传递给objective-c中的方法的最短途径?

背景:我想调用的测试方法多次在一个单元测试,以便需要一条捷径将有效地说:

[myCustomObject compareWithBools:[TRUE, FALSE, TRUE, TRUE, TRUE]] 

在接收方法“compareWithBools”我可以把代码行按摩背部,以便能够进行比较,但只是想测试我可以调用内一个不错的短线...

回答

1

用宏跳过NSNumber包装?

#define Greg_BOOLFromNSString(s) ([(s) isEqualToString:@"YES"]) 

[myCustomObject compareWithStrings:[NSArray arrayWithObjects:@"YES", @"NO", @"YES", @"YES", @"YES", nil]]; 
+0

这看起来相当不错乔希 - 是否打赌添加使用类别的Greg_BOOLFromNSString是NSString的扩展方法? – Greg 2011-04-28 09:54:09

+0

标注为答案,注明最后一行的紧凑性,即使紧凑也很可读。 – Greg 2011-04-28 12:41:26

+0

@Greg:是的,你当然可以使它成为一种方法而不是宏;这种方式确实避免了一些多余的方法调用。 – 2011-04-28 16:18:32

2

的整数关口和比较整数的单独的位:

[myCustomObject compareWithBools:13]; // which will be a sequence of 1011 
+0

哦:),这是非常短的 - 我有点希望能够更容易地看到价值 - 有没有办法在基地2呢?例如“compareWithBools:1011”? – Greg 2011-04-28 06:49:23

+0

您可以通过宏写一个宏BIN2INT(10011) – Eimantas 2011-04-28 06:54:46

+0

这就是您指的Emantas的#define吗? – Greg 2011-04-28 09:55:38

4

这种做法是相当容易

- (NSComparisonResult)compareWithBools:(BOOL*)bools /* << a pointer to an array of BOOLs, which is owned by the caller */ 
           count:(NSUInteger)count; /* << the number of elements in @a bools */ 
+0

这是我的建议。请记住,Obj-C是C的超集,BOOL只是一个整数。所以传递一个BOOL数组很容易。 – McCygnus 2011-04-28 08:28:27

+0

抱歉,没有完全明白 - 您是否在说要在此处编写自定义方法? compareWithBools不是现有的方法吗? – Greg 2011-04-28 09:49:16

+0

@Greg正确,不,它不是现有的方法(我知道)。根据OP的措辞,我认为这是你的意图。我添加了'NSComparisonResult'作为返回类型,因为'compareWith ...:'方法*通常会返回一个比较结果。 – justin 2011-04-28 10:50:03

相关问题