在Xcode 6 Beta 2中,我编写了以下类:
class Item : Printable, Hashable {
var description:String {
return "..."
}
var hashValue:Int {
return 1
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一条错误,指出类型'Item'不符合协议'Equatable',即使我还没有尝试实现一个名为'Equatable'的协议.有没有人见过这样的行为?任何解决方案或解决方法?谢谢!
根据该Hashable文档:(看到页面最底部)
符合Hashable协议的类型必须提供名为hashValue的gettable Int属性,并且还必须提供"is equal"运算符(==)的实现.
并且根据您通过定义操作符重载函数来执行此操作的Equatable文档,==其中所需的类型位于运算符的每一侧.
func == (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.name == rhs.name
}
Run Code Online (Sandbox Code Playgroud)
这意味着你的代码是这样的:
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
Run Code Online (Sandbox Code Playgroud)
当然,假设hashValue你认为它们会使它们等同.
| 归档时间: |
|
| 查看次数: |
3719 次 |
| 最近记录: |