如何通过在Swift中忽略其关联值来比较枚举与关联值?

如何通过在Swift中忽略其关联值来比较枚举与关联值?,第1张

概述阅读 How to test equality of Swift enums with associated values后,我实现了以下枚举: enum CardRank { case Number(Int) case Jack case Queen case King case Ace}func ==(a: CardRank, b: CardRan 阅读 How to test equality of Swift enums with associated values后,我实现了以下枚举:
enum CardRank {    case Number(Int)    case Jack    case Queen    case King    case Ace}func ==(a: CardRank,b: CardRank) -> Bool {    switch (a,b) {    case (.Number(let a),.Number(let b))   where a == b: return true    case (.Jack,.Jack): return true    case (.Queen,.Queen): return true    case (.King,.King): return true    case (.Ace,.Ace): return true    default: return false    }}

以下代码工作原理:

let card: CardRank = CardRank.Jackif card == CardRank.Jack {    print("You played a jack!")} else if card == CardRank.Number(2) {    print("A two cannot be played at this time.")}

但是,这不编译:

let number = CardRank.Number(5)if number == CardRank.Number {    print("You must play a face card!")}

…它给出以下错误信息:

Binary operator ‘==’ cannot be applIEd to operands of type ‘CardRank’ and ‘(Int) -> CardRank’

我假设这是因为它期待一个完整的类型,CardRank.Number不指定整个类型,而CardRank.Number(2)。但是,在这种情况下,我想要匹配任何数字;不只是一个具体的。

显然我可以使用switch语句,但是实现== *** 作符的全部要点是避免这种详细的解决方案:

switch number {case .Number:    print("You must play a face card!")default:    break}

有没有办法将枚举与关联值进行比较,而忽略其关联值?

注意:我意识到我可以将==方法中的case更改为case(.Number,.Number):return true,但是尽管它将正确返回true,但我的比较仍将看起来像是与特定数字进行比较(number == CardRank.Number(2);其中2是虚拟值),而不是任何数字(number == CardRank.Number)。

编辑:正如Etan所指出的那样,您可以省略(_)通配符匹配以更干净地使用。

不幸的是,我不相信在Swift 1.2中有一种比开关方法更简单的方法。

然而,在Swift 2中,您可以使用新的if-case模式匹配:

let number = CardRank.Number(5)if case .Number(_) = number {    // Is a number} else {    // Something else}

如果您希望避免冗长,您可以考虑将一个isNumber计算属性添加到您的枚举中,实现您的switch语句。

总结

以上是内存溢出为你收集整理的如何通过在Swift中忽略其关联值来比较枚举与关联值?全部内容,希望文章能够帮你解决如何通过在Swift中忽略其关联值来比较枚举与关联值?所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存