2011-04-28 54 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