<分区>
例如,我用这样的参数删除一个枚举
enum Foo {
case a(Int)
}
然后我可以将这个枚举与这样的子句进行比较
let f = Foo.a(10)
switch f {
case let .a(k):
print(k)
}
我的问题是
是否可以将这种类型的枚举与 if 语句进行比较?
例如
if f == .a(_) {
print("yes")
}
标签 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
如果情况
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?
ios - 获取 UITableView 错误 "unable to dequeue a cell with identifier cell"