如果我要尝试在objective-c中比较两个对象,我相信从IOS 6开始可以只使用普通运算符,例如==(下面的证明),但是,我想知道如何做到这一点- 比较方法。
据我所知,比较方法以这种方式起作用:
if ([objOne compare:objTwo] == NSOrderedAscending){
// objOne is greater
首先,这是正确的吗?其次,还有哪些比较方法,即NSOrderedAscending?
如果我要尝试在objective-c中比较两个对象,我相信从IOS 6开始可以只使用普通运算符,例如==(下面的证明),但是,我想知道如何做到这一点- 比较方法。
据我所知,比较方法以这种方式起作用:
if ([objOne compare:objTwo] == NSOrderedAscending){
// objOne is greater
首先,这是正确的吗?其次,还有哪些比较方法,即NSOrderedAscending?
类的编写者负责比较,这意味着您必须定义两个对象何时相等。
这是通过定义一个方法来完成的,该方法compare:
应该返回 NSOrderedAscending、NSOrderedDescending、NSOrderedSame
从文档
NSComparisonResult
这些常量用于指示请求中的项目是如何排序的。
enum { NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending }; typedef NSInteger NSComparisonResult;
请注意,没有什么能阻止您创建返回这些 NSComparisionResults 的其他方法。iE NSString 有compare:
和caseInsensitiveCompare:
==
将只检查身份:如果指针相同,这将返回 true,而如果存在不同的对象但相同属性的定义相同,它仍将返回 false。
NSObject 为其中许多方法提供的默认实现适用于实现单个比较方法的对象,其选择器、签名和描述与以下内容匹配:
- (NSComparisonResult)compare:(id)object;
如果接收者小于对象,则此方法应返回 NSOrderedAscending,如果接收者大于对象,则返回 NSOrderedDescending,如果接收者和对象相等,则返回 NSOrderedSame。例如,NSString 并没有实现这个非正式协议中声明的大部分方法,但是 NSString 对象仍然可以正确处理符合该协议的消息,因为 NSString 实现了满足必要要求的 compare: 方法。Cocoa 还包括适当的 compare: NSDate、NSDecimalNumber 和 NSValue 类的方法实现。
这意味着如果你提供了一个-compare:
方法,你也可以使用-isEqual:
.
if ([objOne isEqual:objTwo]){ //…