2012-11-02 7 views
16
-(NSMutableArray *)sortArrayByProminent:(NSArray *)arrayObject 
{ 
    NSArray * array = [arrayObject sortedArrayUsingComparator:^(id obj1, id obj2) { 
     Business * objj1=obj1; 
     Business * objj2=obj2; 
     NSUInteger prom1=[objj1 .prominent intValue]; 
     NSUInteger prom2=[objj2 .prominent intValue]; 
     if (prom1 > prom2) { 
      return NSOrderedAscending; 
     } 
     if (prom1 < prom2) { 
      return NSOrderedDescending; 
     } 
     return NSOrderedSame; 
    }]; 

    NSMutableArray *arrayHasBeenSorted = [NSMutableArray arrayWithArray:array]; 

    return arrayHasBeenSorted; 
} 

Więc w zasadzie mam ten blok, którego używam do sortowania tablicy.Jak utworzyć metodę celu-c, która zwraca blok

Teraz chcę napisać metodę, która zwraca ten blok.

Jak mógłbym to zrobić?

Próbowałem

+ (NSComparator)(^)(id obj1, id obj2) 
{ 
    (NSComparator)(^ block)(id obj1, id obj2) = {...} 
    return block; 
} 

Powiedzmy to jeszcze nie działa.

+0

dokładnie co masz na myśli mówiąc „to nie działa”? To zbyt szeroki sposób na poprawny opis błędu. –

Odpowiedz

50

Podpis sposób, aby powrócić blok jak to powinno być

+(NSInteger (^)(id, id))comparitorBlock { 
    .... 
} 

ten rozkłada się:

+(NSInteger (^)(id, id))comparitorBlock; 
^^ ^ ^^ ^^  ^
ab c  d e e b  f 

a = Static Method 
b = Return type parenthesis for the method[just like +(void)...] 
c = Return type of the block 
d = Indicates this is a block (no need for block names, it's just a type, not an instance) 
e = Set of parameters, again no names needed 
f = Name of method to call to obtain said block 

Aktualizacja: W danej sytuacji, NSComparator jest już typu blokowego. Jej definicja jest:

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2); 

Jako takie, wszystko co musisz zrobić, to zwrócić ten typedef:

+ (NSComparator)comparator { 
    .... 
} 
+3

Nie. 'NSComparator' jest już typem bloku. Prawdopodobnie chodziło o '+ (NSComparisonResult (^) (id, id)) komparator' lub kompilator '+ (NSComparator) '. –

+0

Ups, niedopatrzenie! Dzięki. Tak, poszedłbym z kompilatorem '+ (NSComparator) 'z dwóch, przynajmniej na to pytanie. – WDUK

+0

Czy najpierw zaktualizowałbyś odpowiedź? –