2011-03-01 3 views
15

나는 여기에 열매 맺을 것이다. 어떤 이유로 NSSet (코코아)의 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

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"로 세트를 생성합니다 (즉, YES를 반환).

관련 문제