传统的
不要为缺少的名称使用特殊字符串;不要因为缺少数据而做不自然的事情。写下你自己使用的消息localizedCaseInsensitiveCompare:
,并把它放在你自己的分类上NSString
。
// NSStringEmptyLast.h
@interface NSString (EmptyLast)
- (NSComparisonResult)localizedCaseInsensitiveCompareEmptyLast:(NSString *)aString
@end
// NSStringEmptyLast.m
#import NSStringEmptyLast.h
@implementation NSString (EmptyLast)
- (NSComparisonResult)localizedCaseInsensitiveCompareEmptyLast:(NSString *)aString {
if ([self length] == 0 && [aString length] == 0) {
return NSOrderedSame;
} else if ([self length] == 0 && [aString length] != 0) {
return NSOrderedDescending;
} else if ([self length] != 0 && [aString length] == 0) {
return NSOrderedAscending;
} else {
return [self localizedCaseInsensitiveCompare:aString];
}
}
@end
然后,使用:
[array sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompareEmptyLast:)];
不要害怕为现有课程添加消息。
块
或者,如果您不想编写类别,请使用
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr
wherecmptr
是一个NSComparator
块,它应该与上面给出的消息等效。