使用objective-c中的compare方法比较对象

Ber*_*nie 0 objective-c

如果我尝试比较objective-c中的两个对象,我相信在IOS 6中可以使用普通的运算符,例如==(下面的证明),但是,我想知道如何用它来完成比较方法.

据我所知,compare方法以这种方式工作:

if ([objOne compare:objTwo] == NSOrderedAscending){
    // objOne is greater
Run Code Online (Sandbox Code Playgroud)

首先,这是正确的吗?其次,其他比较方法是什么,即NSOrderedAscending?

在此输入图像描述

Vik*_*ica 7

一个类的作者是可以进行比较的,这意味着你必须定义两个对象何时相等.

这是通过定义一个方法来完成的,该方法compare:应返回NSOrderedAscending,NSOrderedDescending,NSOrderedSame

来自文档

NSComparisonResult

这些常量用于指示请求中的项如何排序.

enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
Run Code Online (Sandbox Code Playgroud)

请注意,没有什么能阻止您创建返回NSComparisionResults的其他方法.iE NSString有compare:caseInsensitiveCompare:

== 将只检查身份:如果指针是相同的,这将返回true,而如果有不同的对象但在相同属性的修改中是相同的,它仍将返回false.


来自NSComparisonMethods Protocol Reference

NSObject为许多这些方法提供的默认实现适用于实现单个比较方法的对象,其选择器,签名和描述符合以下条件:

- (NSComparisonResult)compare:(id)object;
Run Code Online (Sandbox Code Playgroud)

如果接收器小于object,则此方法应返回NSOrderedAscending;如果接收器大于object,则此方法应返回NSOrderedDescending;如果接收器和对象相等,则返回NSOrderedSame.例如,NSString不实现此非正式协议中声明的大多数方法,但NSString对象仍然正确处理符合此协议的消息,因为NSString实现了满足必要要求的compare:方法.Cocoa还包括适用于NSDate,NSDecimalNumber和NSValue类的compare:方法实现.

这意味着如果您提供了一种-compare:方法,您也可以使用-isEqual:.

if ([objOne isEqual:objTwo]){ //…
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述