2011-03-01 19 views
15

我要瘋了。出於某種原因,我找不到一個如何使用NSSet(cocoa)的objectsPassingTest:函數的完整示例。在任何人將我指向關於街區的頁面之前,我已經看到了這些。給出的示例僅顯示如何聲明函數,而不是運行它的塊,以及當我用自己的代碼嘗試他們的示例時,它不起作用。我只想看到一些關於如何使用該函數的工作示例,然後我就可以爲自己解決這個問題。NSSet的objectsPassingTest函數的例子嗎?

回答

30

這是一個簡單的例子。希望能幫助到你。

NSSet *set = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"5",nil]; 

    NSLog(@"%@",set); // Output (3,1,4,2,5) ... all objects 

    NSSet *o = [set objectsPassingTest:^(id obj,BOOL *stop){ 
     NSString *so = (NSString *)obj; 
     int intval = [so intValue]; 
     // accept objects less or equal to two 
     BOOL r = (intval <= 2); 
     return r; 
    }]; 

    NSLog(@"%@",o); // Output (1,2) only objects smaller or equal to 2 
+0

謝謝,這應該非常有幫助。我在工作中早些時候嘗試了「現狀」,現在即將嘗試並將其適用於自己的代碼。奇怪的是,我確定我嘗試了這種方法,但更多地使用了嵌套函數和點語法,所以也許這就是我的問題所在。 – Ash 2011-03-01 18:17:47

4

我從來沒有使用過塊。但我想這是它的工作原理。

NSSet *set = [NSSet setWithObjects:@"FooBar", @"Foo", @"Bar", @"Baz", nil]; 

NSSet *fooSet = [set objectsPassingTest:^(id obj, BOOL *stop) { 
    BOOL testResult = NO; 
    NSString *objStr = (NSString *)obj; 
    if ([objStr hasPrefix:@"Foo"]) { 
     testResult = YES; 
    } 
    if ([objStr hasSuffix:@"Bar"]) { 
     testResult = YES; 
    } 
    return testResult; 
}]; 

這將創建一組與@ 「FooBar的」 @ 「foo」 和@ 「酒吧」,因爲只有通過測試(即返回YES)。

相關問題