如何使用运算符 < 来比较对象或>在 Objective-C 中?

发布于 2024-10-30 18:12:24 字数 348 浏览 1 评论 0 原文

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

- (NSComparisonResult)compare:(id)other;

方法。如果我手动调用该方法,这效果很好

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

有什么方法可以这样做吗?

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

或者我需要重载另一种方法吗?

How do I compare two objects of a custom class in Objective-C? I try to overloading the

- (NSComparisonResult)compare:(id)other;

method. This works great if I call the method manually

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

Is there any way that I can do it like this?

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

Or is there another method that I need to overload?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

勿忘初心 2024-11-06 18:12:24

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

This is not possible, since objective C doesn't have operator overloading. You are comparing pointer values.

暖树树初阳… 2024-11-06 18:12:24

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

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

对于命名良好的函数,这与重载没有太大不同,尽管它会阻止您使用 >和<。尽管包含重载,但您编写的实际代码应该是相同的。

One way to achieve this is for your class you can define comparisons to everything that make sense to compare with.

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

With well-named functions this isn't terribly different than overloading although yes it prevents you from using > and <. The actual code you write should be identical though as if overloading were included.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文