swift - 我可以使用 if 来比较包含参数的枚举吗?

标签 swift

<分区>

例如,我用这样的参数删除一个枚举

enum Foo {        
    case a(Int)
}

然后我可以将这个枚举与这样的子句进行比较

let f = Foo.a(10)

switch f {
case let .a(k):
    print(k)
}

我的问题是

是否可以将这种类型的枚举与 if 语句进行比较?

例如

if f == .a(_) {
    print("yes")
}

最佳答案

是的,是的。在您已经编写的 switch 语句之上,您至少有两个选项。

  • 一个。使用 Equatable
  • b。 如果情况

使用Equatable

使您的enum Equatable,并使用==。在您的情况下,您无需编写任何代码,除了:

enum Foo: Equatable {
    case a(Int)
}

if f == .a(10) {
    print("yes")
}

使用if case

如果你不想或不能轻易地使你的类型Equatable,你总是可以使用if case:

if case .a = f {
    print("yes")
}

if case .a(let x) = f, x == 10 {
    print("yes")
}

如果您想捕获值以在 if 分支中使用它,第二个示例也很方便,而不必检查它是否进行等式检查

if case .a(let x) = f {
    print(x)
}

关于swift - 我可以使用 if 来比较包含参数的枚举吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54819482/

相关文章:

iOS-Swift,Stripe 创建临时 key 返回 Google 登录页面

ios - 以编程方式从 UINavigationBar 隐藏 UIBarButtonItem Swift2

Objective-C 转换为 Swift 3.1 出现错误 'Any' 不可转换

macos - 如何在 NSTableView 中放置和控制复选框?

ios - 无法调用非函数类型 'JSON' 的值,如何从 Swift 中的 block 返回值

ios - 如何将一个SCNNode指向另一个SCNNode?

swift - 在 SwiftUI 中移动表行

ios - 获取 UITableView 错误 "unable to dequeue a cell with identifier cell"

ios - 如何从联系人框架获取帐户名称

xcode - 如何添加 TableView 数据源并委托(delegate)给单独的类/对象?