2014-06-15 43 views
0

“在Cocoa和Objective C中使用Swift”使得它非常清晰,您应该为从NSObject继承的事物定义isEquals,但在此之后,我不确定何时需要编写它。它说:什么时候编写isEqual在Swift中有意义?

“因为您可以将Swift对象(包括非NSObject派生的对象)传递给Objective-C API,所以如果您希望Objective-C API比较内容,您应该为这些类实现isEqual:方法的对象而不是他们的身份。“

但是,我们如何知道Cocoa API何时会使用isEquals方法?

+0

比较泛型时,Cocoa API将始终使用isEqual方法。例如:将'NSString'子类与'id'比较将使用isEqual。 –

回答

0

您引用的文档不建议您尝试猜测Cocoa API是否将使用isEqual:或不。你所引用的文档表明,只要你将一个对象传递给Objective-C API,它就应该实现这个方法。

因此,对于您传递给任何Cocoa API的任何对象,您应该实施isEqual:方法,以防您正在使用的Cocoa API使用此方法。

+0

如果我们能够以某种方式保证只有一个实例具有某一组数据,例如,我们是不是不想实现它? – ctbeiser

+0

从你引用的文本中,听起来好像没有'isEqual:',身份将被比较(他们的内存位置),所以你不一定要实现它,但为了完整性,我会实现它就像'==='比较,所以我们明确表示这是我们打算做的。 – nhgrif

相关问题