Вам необходимо определить пользовательскую функцию сортировки, а затем передать ее в метод NSArray, который позволяет настраивать пользовательскую сортировку. Например, используя sortedArrayUsingFunction:context:
, вы могли бы написать (предполагая, что ваши типы являются экземплярами NSString):
NSInteger customSort(id obj1, id obj2, void *context) {
NSString * type1 = [obj1 type];
NSString * type2 = [obj2 type];
NSArray * order = [NSArray arrayWithObjects:@"topic", @"users", @"questions", nil];
if([type1 isEqualToString:type2]) {
return NSOrderedSame; // same type
} else if([order indexOfObject:type1] < [order indexOfObject:type2]) {
return NSOrderedDescending; // the first type is preferred
} else {
return NSOrderedAscending; // the second type is preferred
}
}
// later...
NSArray * sortedArray = [myGenericArray sortedArrayUsingFunction:customSort
context:NULL];
Если ваши типы не являются NSStrings, просто адаптируйте функцию по мере необходимости - вы можете заменить строки в массиве order
вашими реальными объектами или (если ваши типы являются частью перечисления) сделать прямое сравнение и полностью исключить массив order
.