【问题标题】:How to compare objects using operator < or > in Objective-C?如何在 Objective-C 中使用运算符 < 或 > 比较对象?
【发布时间】:2011-04-04 14:36:52
【问题描述】:

如何在 Objective-C 中比较自定义类的两个对象?我尝试重载

- (NSComparisonResult)compare:(id)other;

方法。如果我手动调用该方法,这将非常有用

if ([obj1 compare:obj2] == NSOrderedDescending) {  
    // do something  
}  

有什么办法可以做到这样吗?

if (obj1 > obj2) {
    // do something
}

或者我需要重载其他方法吗?

【问题讨论】:

  • 您打算如何进行比较?如果您想按排序顺序将单个项目插入到集合中,我建议您查看indexOfObject:inSortedRange:options:usingComparator:。它适用于 Mac OS X v10.6 及更高版本中的NSArray

标签: objective-c object compare


【解决方案1】:

这是不可能的,因为目标 C 没有运算符重载。您正在比较指针值。

【讨论】:

  • 感谢您的声明。现在我可以理解为什么与 > 进行比较有时似乎有效。下次我会尽量不比较指针值。 :)
【解决方案2】:

实现这一点的一种方法是,您可以为您的班级定义与所有有意义的比较的比较。

@interface MyClass : NSObject
{
    // your stuff
}
- (BOOL)isGreaterThanNumber:(NSNumber *)otherNumber;
+ (BOOL)compare:(MyClass *)myClass toNumber:(NSNumber *)otherNumber;

对于命名良好的函数,这与重载并没有太大的不同,虽然是的,它会阻止您使用 > 和

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2023-03-03
    • 2012-11-03
    相关资源
    最近更新 更多