现在随着Swift越来越趋于完美,很多人开始使用Swift来写代码.
在Swift与Objc结合使用时,还是要注意一些地方,比如数组元素的查找.
从Swift里传入一个Node对象,在Objc里Node数组里查询,往往你就找不到 😦
原因是Objc的数组查询时会调用Node的 isEqual:方法:
- (NSUInteger)indexOfObject:(ObjectType)anObject;
Starting at index 0, each element of the array is passed as an argument to an isEqual: message sent to anObject until a match is found or the end of the array is reached. Objects are considered equal if isEqual: (declared in the NSObject protocol) returns YES.
如果你自己不实现isEqual:方法,Objc会使用对象地址比较它们的相等性,这样一来两个不同对象即使真的内容完全一样也不会相等.
简单来说,我们需要自己实现isEqual:方法:
-(BOOL)isEqual:(id)object{
Node* node = (Node*)object;
if(node.nodeId == self.nodeId){
return true;
}
return false;
}
那么在实现了相等方法之后,从Swift中传入的相等对象与Objc对象的比较都会如出一辙,你不会再为此烦恼了.