Передача селектора через ссылку на класс - PullRequest
0 голосов
/ 01 ноября 2011

Я хочу написать общий сортировщик массива, который принимает только два аргумента: сортируемый массив и класс, содержащий реализацию компаратора, где ссылка на класс содержит используемый метод класса.

Структура метода должна выглядеть примерно так:

+(NSArray*) sortArray:(NSArray*)unsortedArray withClass:(Class)classReference{
    return [unsortedArray sortedArrayUsingSelector: @selector([classReference comparator])];
}

Основная идея будет состоять в том, чтобы позволить мне написать протокол, который будет использоваться при сортировке массива по различным типам данных, а затем передать класс и его массив вКласс утилит, в котором он может сортировать и возвращать результат.

1 Ответ

0 голосов
/ 01 ноября 2011

Вы можете использовать блоки. Например, вот так:

+(NSArray*) sortArray:(NSArray*)unsortedArray withClass:(Class)classReference{
     return [unsortedArray sortedArrayUsingComparator:^(id obj1, id obj2){
         return (NSComparisonResult)[classReference compare:[NSArray arrayWithObjects:obj1, obj2, nil]];
}];
...