成员运算符“==”必须至少有一个类型参数

ada*_*haU 4 swift swift3

我正在尝试在 equalityClass 中实现 Equatable 协议,但显示成员运算符 '==' 必须至少有一个类型为 'eqaualityClass' 的参数。有人可以解释这里出了什么问题吗?

protocol Rectangle: Equatable {

    var width: Double { get }
    var height: Double { get }

}

class eqaualityClass:Rectangle{

    internal var width: Double = 0.0
    internal var height: Double = 0.0

      static func == <T:Rectangle>(lhs: T, rhs: T) -> Bool {
          return lhs.width == rhs.width && rhs.height == lhs.height
     }
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*bus 5

你需要让你的 Rectangle 协议成为一个类。像这样尝试:

protocol Rectangle: class, Equatable {
    var width: Double { get }
    var height: Double { get }
}

class Equality: Rectangle {
    internal var width: Double = 0
    internal var height: Double = 0
    static func ==(lhs: Equality, rhs: Equality) -> Bool {
        return lhs.width == rhs.width && rhs.height == lhs.height
    }
}
Run Code Online (Sandbox Code Playgroud)

或者干脆:

protocol Rectangle: Equatable {
    var width: Double { get }
    var height: Double { get }
}

extension Rectangle {
    static func ==(lhs: Self, rhs: Self) -> Bool {
        return lhs.width == rhs.width && rhs.height == lhs.height
    }
}

class Equality: Rectangle {
    internal var width: Double = 0
    internal var height: Double = 0
}
Run Code Online (Sandbox Code Playgroud)