ios – 比较所有可能情况下的两个枚举

ios – 比较所有可能情况下的两个枚举,第1张

概述我有一个包含大量不同案例的枚举.想象它就像石头剪刀一样. enum Play { case Rock, Paper, Scissors} 现在我正在创建一个具有Play属性的类和一个将另一个Play参数作为“攻击者”的方法,我需要比较所有可能的结果.我能想到的唯一方法就是嵌套开关,但由于我的枚举超过3个案例,因此它成为一个很有可能出错的大功能. func determineEffecti 我有一个包含大量不同案例的枚举.想象它就像石头剪刀一样.

enum Play {    case Rock,Paper,Scissors}

现在我正在创建一个具有Play属性的类和一个将另一个Play参数作为“攻击者”的方法,我需要比较所有可能的结果.我能想到的唯一方法就是嵌套开关,但由于我的枚举超过3个案例,因此它成为一个很有可能出错的大功能.

func determineEffectiveness(withAttacker attacker: Play) {    switch attacker.type {        case .Rock {            switch self.type {                case .Rock {                    return 0                }                case .Paper {                    return 1                }                case .Scissors {                    return -1                }            }        }        case .Paper {             // ...etc        }    }}

这是一种丑陋的暴力方法,但我很难想出更好的解决方案.

更新:

按照惯例……在我提出问题之后,我想出了一个更好的解决方案.我将把这个解决方案作为答案但我不会接受它,直到我得到别人的答案,因为可能有更好的方法.

解决方法 Rock,Scissors是一款平价游戏.如果你让游戏变得更复杂,比如Rock,Scissors,Spock,lizard,它会变得更加清晰.如果距离是偶数,则较低的值获胜.如果距离是奇数,则较高的值获胜.这是我们构建它的一种简单方法:

enum Hand: Int {    enum Result {        case lose,tIE,win    }    case rock,paper,scissors,spock,lizzard    func result(against: Hand) -> Result {        let distance = rawValue - against.rawValue        if distance == 0 { return .tIE }        if distance % 2 == 0 {            return (rawValue < against.rawValue) ? .win : .lose        }        return (rawValue > against.rawValue) ? .win : .lose    }}

当然这仍适用于R-P-S.只需删除最后两个元素.请记住,枚举顺序非常重要.

总结

以上是内存溢出为你收集整理的ios – 比较所有可能情况下的两个枚举全部内容,希望文章能够帮你解决ios – 比较所有可能情况下的两个枚举所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存