如果我尝试比较objective-c中的两个对象,我相信在IOS 6中可以使用普通的运算符,例如==(下面的证明),但是,我想知道如何用它来完成比较方法.
据我所知,compare方法以这种方式工作:
if ([objOne compare:objTwo] == NSOrderedAscending){
// objOne is greater
Run Code Online (Sandbox Code Playgroud)
首先,这是正确的吗?其次,其他比较方法是什么,即NSOrderedAscending?

一个类的作者是可以进行比较的,这意味着你必须定义两个对象何时相等.
这是通过定义一个方法来完成的,该方法compare:应返回NSOrderedAscending,NSOrderedDescending,NSOrderedSame
来自文档
NSComparisonResult
这些常量用于指示请求中的项如何排序.
Run Code Online (Sandbox Code Playgroud)enum { NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending }; typedef NSInteger NSComparisonResult;
请注意,没有什么能阻止您创建返回NSComparisionResults的其他方法.iE NSString有compare:和caseInsensitiveCompare:
== 将只检查身份:如果指针是相同的,这将返回true,而如果有不同的对象但在相同属性的修改中是相同的,它仍将返回false.
来自NSComparisonMethods Protocol Reference
NSObject为许多这些方法提供的默认实现适用于实现单个比较方法的对象,其选择器,签名和描述符合以下条件:
Run Code Online (Sandbox Code Playgroud)- (NSComparisonResult)compare:(id)object;如果接收器小于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)

| 归档时间: |
|
| 查看次数: |
7036 次 |
| 最近记录: |