Swift Enum的自定义类型符合hashable协议
发布时间:2020-12-14 04:50:13 所属栏目:百科 来源:网络整理
导读:我有这样的枚举: enum Animals { case Cow (MyCowClass) case Bird (MyBirdClass) case Pig (MyPigClass) case Chicken (MyChickenClass)} 每种类型都符合可混合协议.这个枚举然后成为另一个类的属性: class Farm { let name = "Bob's Farm" var animal =
|
我有这样的枚举:
enum Animals {
case Cow (MyCowClass)
case Bird (MyBirdClass)
case Pig (MyPigClass)
case Chicken (MyChickenClass)
}
每种类型都符合可混合协议.这个枚举然后成为另一个类的属性: class Farm {
let name = "Bob's Farm"
var animal = Animals
required init(animal: Animals) {
self.animal = animal
}
我想从案例的实例中获取哈希值并将其用于枚举,这样我就可以使用名称&动物. 解决方法
你可以让动物可以洗,例如:
enum Animals : Hashable {
case Cow (MyCowClass)
case Bird (MyBirdClass)
case Pig (MyPigClass)
case Chicken (MyChickenClass)
var hashValue: Int {
switch self {
case .Cow(let v): return v.hashValue
case .Bird(let v): return v.hashValue
case .Pig(let v): return v.hashValue
case .Chicken(let v): return v.hashValue
}
}
}
func ==(lhs: Animals,rhs: Animals) -> Bool {
return ...
}
同样对于农场类,例如: class Farm : Hashable ?{
var hashValue: Int {
return [name.hashValue,animal.hashValue].hashValue
}
}
func ==(lhs: Farm,rhs: Farm) -> Bool {
return ...
}
最后,Ints的容器实现了一个属性hashValue extension CollectionType where Generator.Element: Int {
var hashValue: Int {
return ...
}
}
对于适当的算法,您可以搜索网络 – 例如:http://www.eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
