我有这样的枚举:
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 ... }
extension CollectionType where Generator.Element: Int { var hashValue: Int { return ... } }
对于适当的算法,您可以搜索网络 – 例如:http://www.eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。