为PFObject设置equatable

时间:2015-08-24 14:46:44

标签: swift parse-platform pfobject equatable

在swift

中设置equatable时遇到错误
extension PFObject : Equatable {}

public func ==(lhs:PFObject,rhs:PFObject) -> Bool {

return lhs.objectId == rhs.objectId
}

下面的错误我得到了

  

'PFObject'与协议'Equatable'的冗余一致性

这个错误有什么解决方案吗?

3 个答案:

答案 0 :(得分:3)

Swift 2中的更改使每个NSObject符合Equatable通过isEqual实现,它只是比较指针值(read more here)。

您可以使用以下扩展名覆盖isEqual的默认实现:

extension PFObject {
  public override func isEqual(object: AnyObject?) -> Bool {
    if (object as? PFObject)?.objectId == self.objectId {
      return true
    } else {
      return super.isEqual(object)
    }
  }
}

答案 1 :(得分:0)

PFObject继承自NSObject,因此已符合Equatable

不应将Equatable添加到已实现它的类中,而应将其子类化并覆盖默认实现。

答案 2 :(得分:0)

这是isEqual的示例实现,该实现还检查对象是否具有相同的Parse对象类型。

extension PFObject {
    open override func isEqual(_ object: Any?) -> Bool {
        if let parseObject = object as? PFObject {
            return parseObject.parseClassName == self.parseClassName && parseObject.objectId == self.objectId
        } else {
            return super.isEqual(object)
        }
    }
}