См. NSMutableArray
метод sortUsingFunction:context:
Вам необходимо настроить функцию сравнить , которая принимает два объекта (типа Person
, поскольку вы сравниваете два объекта Person
) и параметр context .
Два объекта являются просто экземплярами Person
. Третий объект - это строка, например, @ "РОЖДЕНИЕ".
Эта функция возвращает NSComparisonResult
: возвращает NSOrderedAscending
, если PersonA.birthDate
<<code>PersonB.birthDate. Он вернет NSOrderedDescending
, если PersonA.birthDate
> PersonB.birthDate
. Наконец, он вернет NSOrderedSame
, если PersonA.birthDate
== PersonB.birthDate
.
Это грубый псевдокод; вам нужно будет уточнить, что означает, что одна дата «меньше», «больше» или «равна» другой дате (например, сравнение секунд с момента начала и т. д.):
NSComparisonResult compare(Person *firstPerson, Person *secondPerson, void *context) {
if ([firstPerson birthDate] < [secondPerson birthDate])
return NSOrderedAscending;
else if ([firstPerson birthDate] > [secondPerson birthDate])
return NSOrderedDescending;
else
return NSOrderedSame;
}
Если вы хотите что-то более компактное, вы можете использовать троичные операторы:
NSComparisonResult compare(Person *firstPerson, Person *secondPerson, void *context) {
return ([firstPerson birthDate] < [secondPerson birthDate]) ? NSOrderedAscending : ([firstPerson birthDate] > [secondPerson birthDate]) ? NSOrderedDescending : NSOrderedSame;
}
Встраивание может немного ускорить это, если вы делаете это много.