假设我有这个枚举:
enum Item {
case foo(String)
case bar(String)
}
以及它的列表:
let items: [Item] = [.foo("aa"), .bar("bb")]
我想找到first foo
其中的一项,这就是我所做的:
items.first { (item) -> Bool in
switch item {
case .foo:
return true
default:
return false
}
}
有没有优雅的方式来写这样的东西:
items.first { case .foo = $0 }
(上面的代码显然不起作用)
枚举器with关联值(编辑问题)
如果您有一个枚举,其枚举器具有关联的值,您可以替换switch
声明如果if case (let) ... else
语句,因为您专门搜索给定的枚举器模式(其余的都没有 ->else
). E.g.:
let item = items.first {
if case .foo = $0 { return true }
else { return false }
}
没有关联值的枚举器(原始问题)
=
是赋值,而==
是平等比较。在这里,您想要后者:
let item = items.first { $0 == .foo }
// or
let item = items.first { .foo == $0 }
您还可以使用模式匹配~=
操作员:
let item = items.first { $0 ~= .foo }
// or
let item = items.first { .foo ~= $0 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)