Swift Enum的自定义类型符合hashable协议

Swift Enum的自定义类型符合hashable协议,第1张

概述我有这样的枚举: enum Animals { case Cow (MyCowClass) case Bird (MyBirdClass) case Pig (MyPigClass) case Chicken (MyChickenClass)} 每种类型都符合可混合协议.这个枚举然后成为另一个类的属性: class Farm { le 我有这样的枚举:

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协议所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1012066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存