有没有一个比较Objective-C中的两个对象的标准机制?
我知道isEqual方法,但我并不是在寻找完全相同的方式,而是比较少于/多于/等于某种比较.
在Java中,我们有compareTo:这样做,Objective-C中有什么吗?
解决方法
在Objective-C中,没有用于比较的标准方案,如可比较的< T>接口在Java中,但是来自Foundation框架的一些类定义了一个compare:方法.
如果要为自定义类提供自己的比较方法,我建议您遵守约定并提供具有以下签名的方法
- (NSComparisonResult)compare:(MyClass *)object;
NSComparisonResult
是一个定义如下的枚举
enum { NSOrderedAscending = -1,NSOrderedSame,NSOrderedDescending }; typedef NSInteger NSComparisonResult;
NSOrderedAscending意味着左操作数小于正确的操作数(并从中获得其他操作数).
注意
值得强调的是,Objective-C和密切相关的基础框架是建立在公约之上的.它们不仅仅是一种惯用的写作方式,有时候执行依赖于它们.例如,如果您在不指定自定义选择器的情况下实现NSSortDescriptor
,则默认实现将在对象上调用compare:. (以David Ronnqvist为例)
另一个值得注意的例子是方法的命名约定.从init开始的实例方法预期返回一个具有1个保留计数的对象.这是一个非常强大的惯例,随着ARC的到来,has been formalized和内置于编译器中.
包装:约定总是重要的.在Objective-C中,有时候它们是根本的.