2016-07-07 77 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 
    } 
} 
相關問題