我注意到NSString
理解了消息compare:
,但我无法了解有关在Cocoa中比较对象的通用机制的信息。什么类实现compare:
?这是某种protocol
吗?
我需要这个来实现类似于Smalltalk's
OrderedCollection
的东西:一个始终保持排序的数组。
谢谢你!
答案 0 :(得分:2)
你正确地在某些类上出现compare:
并且用于排序,但它不是任何协议的标准部分。 (-isEqual:
需要NSObject
,因此几乎所有内容都存在。{/ p>
您可以通过告诉集合通过compare:
方法对每个项目对其内容进行排序来对集合进行排序:
[myMutableArray sortUsingSelector:@selector(compare:)];
如果在自己的类上实现比较方法,那么它应该接受同一个类的对象,并根据需要返回NSOrderedAscending
,NSOrderedDescending
或NSOrderedSame
。
该方法的存在不是标准化的,因为它的语义不能真正标准化。许多对象可以通过多种方式进行“比较”,具体取决于您的需求。即使字符串同时包含compare:
和caseInsensitiveCompare:
以及许多其他与语言环境相关的选项,具体取决于您要实现的目标。
所有这一切都说,当它适用于您时使用compare:
,但它可以追溯到早期的ObjC,并且在许多自定义比较案例中也有基于块的机制用于排序,您可能会觉得更简单