2017-03-18 98 views
3

我试图在equalityClass中实现Equatable协议,但显示成员操作符'=='必须至少有一个类型为'eqaualityClass'的参数 .can任何人解释什么是错误的?成员操作符'=='必须至少有一个参数类型

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 
    } 
} 
+0

我觉得这回答了你的问题:会员操作“%”必须有类型的至少一个参数“视图控制器”(HTTP://计算器。 COM /问题/ 40932230 /成员运营商必须具备的,在-至少一参数的-的型视图控制器) – leanne

回答

2

您需要使您的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 
    } 
} 

protocol Rectangle: class, 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 
} 
+0

感谢它的worked.can请你解释为什么使用class关键字? – adarshaU

+1

请查看http://stackoverflow.com/a/41970266/2303865 –

相关问题