2016-07-07 78 views

回答

3

这不是斯威夫特版本。它也会在Swift 2上发生错误。问题是您必须定义Struct的以外的==函数,因为它必须是全局函数。

+0

谢谢。第一次与Hashable合作,Equatable。现在很好地工作。 – selcuk

+0

@selcuk:请阅读[this](http://stackoverflow.com/help/someone-answers) –

4

任何符合Hashable协议的Swift类型都必须符合Equatable协议。因为Hashable协议是从Equatable协议(source)继承的。这就是为什么你会收到错误信息。

至于你的问题,==功能必须全局声明,因为你重写全局==操作符能够比较你定义的两个属性。使用Swift 3,你也可以在结构本身中定义==,但它必须是静态的。

struct Attributes: Hashable { 
    var uid: Int 
    var size: Size 
    var mimeType: mimeType 

    var hashValue: Int { 
     return uid 
    } 

    static func ==(lhs: Attributes, rhs: Attributes) -> Bool { 
     return lhs.size == rhs.size && lhs.mimeType == rhs.mimeType 
    } 
}