Как мне создать метод target-c, который возвращает блок
-(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;
}
Так что в основном у меня есть этот блок, который я использую для сортировки массива.
Теперь я хочу написать метод, который возвращает этот блок.
Как бы я это сделал?
Я старался
+ (NSComparator)(^)(id obj1, id obj2)
{
(NSComparator)(^ block)(id obj1, id obj2) = {...}
return block;
}
Скажем так, это пока не работает.
1 ответ
Решение
Подпись метода для возврата блока, как это должно быть
+(NSInteger (^)(id, id))comparitorBlock {
....
}
Это разлагается на:
+(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
Обновление: в вашей конкретной ситуации, NSComparator
уже имеет тип блока. Его определение таково:
typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
Таким образом, все, что вам нужно сделать, это вернуть typedef:
+ (NSComparator)comparator {
....
}