2014-07-09 58 views
4

在Xcode中6 Beta 2中我寫了下面的類:類型不符合一個未定義的協議

class Item : Printable, Hashable { 
    var description:String { 
    return "..." 
    } 
    var hashValue:Int { 
     return 1 
    } 
} 

我收到一個錯誤,指出類型「項」不符合協議「Equatable 「儘管我還沒有試圖實施一個名爲」可衡量「的協議。有沒有人看過像這樣的行爲?任何解決方案或解決方法?謝謝!

回答

4

根據the Hashable docs:(請參閱網頁的最下方)

類型符合哈希的協議必須提供理由一個名爲hashValue的gettable Int屬性,並且還必須提供「is equal」運算符(==)的實現。

而且根據the Equatable docs你做到這一點通過定義==的運算符重載函數,你想要的類型是運營商的每一面。

func == (lhs: MyStruct, rhs: MyStruct) -> Bool { 
    return lhs.name == rhs.name 
} 

這意味着你的代碼是這樣的:

class Item : Printable, Hashable { 
    var description:String { 
     return "..." 
    } 
    var hashValue:Int { 
     return 1 
    } 
} 

func == (lhs: Item, rhs: Item) -> Bool { 
    return lhs.hashValue == rhs.hashValue 
} 

// Testing... 
Item() == Item() //-> true 

假設hashValue是你的想法會令他們相當的,當然。

+0

爲什麼你不能只符合* Equatable *協議,然後使用'lhs.hashValue == rhs.Value'實現? – Honey

2

Hashable協議實現Equatable協議,因此爲什麼編譯器會抱怨

相關問題