0

如果我要尝试在objective-c中比较两个对象,我相信从IOS 6开始可以只使用普通运算符,例如==(下面的证明),但是,我想知道如何做到这一点- 比较方法。

据我所知,比较方法以这种方式起作用:

if ([objOne compare:objTwo] == NSOrderedAscending){
    // objOne is greater

首先,这是正确的吗?其次,还有哪些比较方法,即NSOrderedAscending?

在此处输入图像描述

4

1 回答 1

7

类的编写者负责比较,这意味着您必须定义两个对象何时相等。

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

文档

NSComparisonResult

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

enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};
typedef NSInteger NSComparisonResult;

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

==将只检查身份:如果指针相同,这将返回 true,而如果存在不同的对象但相同属性的定义相同,它仍将返回 false。


来自NSComparisonMethods 协议参考

NSObject 为其中许多方法提供的默认实现适用于实现单个比较方法的对象,其选择器、签名和描述与以下内容匹配:

- (NSComparisonResult)compare:(id)object;

如果接收者小于对象,则此方法应返回 NSOrderedAscending,如果接收者大于对象,则返回 NSOrderedDescending,如果接收者和对象相等,则返回 NSOrderedSame。例如,NSString 并没有实现这个非正式协议中声明的大部分方法,但是 NSString 对象仍然可以正确处理符合该协议的消息,因为 NSString 实现了满足必要要求的 compare: 方法。Cocoa 还包括适当的 compare: NSDate、NSDecimalNumber 和 NSValue 类的方法实现。

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

if ([objOne isEqual:objTwo]){ //…

在此处输入图像描述

于 2013-02-26T19:57:21.307 回答