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 – 比较所有可能情况下的两个枚举所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)