我对 objective-c 还是个新手,我想弄清楚这条语句到底在做什么。
[names allKeys] sortedArrayUsingSelector:@selector(compare:)];
我知道 allKeys
正在从我的字典中获取所有键。我知道 sortedArrayUsingSelector
正在对我创建的数组进行排序。然后我调用比较方法,那是我迷路的地方这是在做什么?在苹果文档中,它说“返回一个 NSComparisonResult 值,该值指示接收者是大于、等于还是小于给定数字。”我不明白它是如何基于该方法进行排序的。
最佳答案
NSArray * sortedKeys = [[names allKeys] sortedArrayUsingSelector:@selector(compare:)];
以上代码使用您提供的选择器返回字典键的排序数组。选择器实际上是将在数组中排序的对象上调用的函数。在这种情况下,您的数组包含字符串,因此在实际的 NSArray 排序代码中会发生以下情况,
//...
[key1 compare:key2];
//..
如果你传入一个不同的选择器让我们说@selector(randomFunction:) 然后在排序代码中会发生以下情况
//..
[key1 randomFunction:key2];
//..
因为 NSString 不响应选择器 randomFunction 你会得到一个错误。如果您想创建自己的比较函数类型,您需要向数组包含的类添加一个类别(在您的例子中是 NSString 的类别)。
对数组进行排序的更好方法是使用 block 语句。
id mySort = ^(NSString * key1, NSString * key2){
return [key1 compare:key2];
};
NSArray * sortedKeys = [[names allKeys] sortedArrayUsingComparator:mySort];
它是一种更好的方法的原因是对任何对象进行排序都非常容易。
id mySort = ^(MyObject * obj1, MyObject * obj2){
return [obj1.title compare:obj2.title];
};
NSArray * sortedMyObjects = [myObjects sortedArrayUsingComparator:mySort];
关于objective-c - sortedArrayUsingSelector 它在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242588/