Objective C中有一个代码我尝试使用swift进行翻译,包括将isEqual:function更改为== operand。问题是代码要求我检查被比较实例的超级,但是从运营商功能所在的全局范围来看这是不可能的。
还有其他方法可以将此代码迁移到swift吗?
- (BOOL)isEqual:(id)object
{
AAPLCollectionViewGridLayoutAttributes *other = object;
if (![super isEqual:other])
return NO;
return YES;
}
答案 0 :(得分:0)
您可以将解决方案分为两个步骤:
1)定义AAPLCollectionViewGridLayoutAttributes的扩展名,覆盖isEqual方法。 (在这里你可以访问超级)。
extension AAPLCollectionViewGridLayoutAttributes {
public override func isEqual(object: AnyObject!) -> Bool {
// your custom logic will go here
var other = object as AAPLCollectionViewGridLayoutAttributes
return super.isEqual(other)
}
}
2)重载==运算符,只需调用上面定义的方法。
public func ==(lhs: AAPLCollectionViewGridLayoutAttributes, rhs: AAPLCollectionViewGridLayoutAttributes) -> Bool {
return lhs.isEqual(rhs)
}
请注意我使用了" public"修饰符两次,它们应该与类AAPLCollectionViewGridLayoutAttributes的访问修饰符兼容。