我经常使用这个
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:nil
ascending:YES
comparator:^(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
}];
我想创建一个像这样的编译器
#define descriptor [NSSortDescriptor sortDescriptorWithKey:nil
ascending:YES
comparator:^(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
}]
所以我可以在我的代码的所有部分使用它,而不必一直声明它并在像
之类的东西上使用它mySortedArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
。我试过这个,并从Xcode收到了大量的错误。有没有办法来定义?
感谢
答案 0 :(得分:2)
你快到了那里:
#define descriptor [NSSortDescriptor sortDescriptorWithKey:nil \
ascending:YES \
comparator:^(id obj1, id obj2) { \
return [obj1 compare:obj2 options:NSNumericSearch];}]
然后:
NSArray *sorted = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
您遇到错误的原因是您在转到新线路时应使用 \ 。另外-sortedArrayUsingDescriptors
需要一个数组......
答案 1 :(得分:1)
您可以创建两件事之一:
NSObjects
的类别,您可以在其中定义您的方法。根据您对NSSortDescriptor
的使用情况,类别可能是一个很好的解决方案。您始终可以将其设为NSArray
类,而不是NSObject
类。
答案 2 :(得分:1)
我认为它不起作用的原因是功能
[NSArray sortedArrayUsingDescriptors:];
需要数组作为参数,但是您直接传递NSSortDescriptor
。
尝试使用相同的:
myArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
#define
将是
#define descriptor [NSSortDescriptor sortDescriptorWithKey:nil \
ascending:YES \
comparator:^(id obj1, id obj2) { \
return [obj1 compare:obj2 options:NSNumericSearch]; \
}]
或强>
#define descriptor [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES comparator:^(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }]