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
总结以上是内存溢出为你收集整理的Swift Enum的自定义类型符合hashable协议全部内容,希望文章能够帮你解决Swift Enum的自定义类型符合hashable协议所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)