2012-11-02 32 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; 
} 

Vì vậy, về cơ bản tôi có khối này mà tôi sử dụng để sắp xếp mảng.Làm cách nào để tạo phương thức target-c trả về một khối

Bây giờ tôi muốn viết một phương thức trả về khối đó.

Tôi làm như thế nào?

tôi đã cố gắng

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

Hãy chỉ nói rằng nó không hoạt động được nêu ra.

+0

Chính xác những gì bạn có ý nghĩa bởi "nó không hoạt động"? Đó là cách quá rộng cho một mô tả lỗi thích hợp. –

Trả lời

50

Một chữ ký phương pháp để trả lại một khối như thế này nên

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

này phân hủy thành:

+(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 

Cập nhật: Trong trường hợp cụ thể của bạn, NSComparator đã thuộc loại khối. định nghĩa của nó là:

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

Như vậy, tất cả các bạn cần làm là trở typedef này:

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

Không. 'NSComparator' đã là một kiểu khối. Bạn có thể có nghĩa là '+ (so sánh NSComparisonResult (^) (id, id))' hoặc' + (NSComparator) comparator'. –

+0

Rất tiếc, giám sát! Cảm ơn. Yeah, tôi sẽ đi với '+ (NSComparator) comparator' ra khỏi hai, cho câu hỏi này ít nhất. – WDUK

+0

Bạn có cập nhật câu trả lời trước được không? –

Các vấn đề liên quan