swift 二进制运算符'!='不能应用于两个'any P'操作数

hsgswve4  于 2023-04-28  发布在  Swift
关注(0)|答案(1)|浏览(130)

我尝试了这段代码:

import Foundation

protocol P: Equatable {}

class T {
    var p: any P
    
    init(_ pp: any P) {
        self.p = pp
    }
    
    func update(_ pp: any P) {
        if pp != p {
            p = pp
        }
    }
}

但我得到一个错误:
二进制运算符'!='不能应用于两个'any P'操作数
为什么会这样,我该如何解决?谢谢你的帮助

n6lpvg4x

n6lpvg4x1#

You cannot equate existentials . You need one concrete Equatable type.

func update(_ p: any P) {
  if !self.p.equals(p) {
    self.p = p
  }
}
public extension Equatable {
  /// Equate with a value of unknown type.
  func equals(_ any: some Any) -> Bool {
    self == any as? Self
  }
}
  • 此方法依赖于隐式地打开一个存在操作数,不幸的是不能由操作符(例如,操作符)复制。例如!=?)。*

相关问题