类似于此How to remove an element of a given value from an array in Swift
但用于枚举
我将如何删除具有给定枚举的值( 不允许比较)这些枚举的数组?
无法将该枚举转换为Int,因为存在一些参数化的情况
示例代码(无法编译):
enum test
{
case foo
case bar(baz: Locale)
}
var arr: [test] = [.foo, .bar(baz: Locale.current)]
arr = arr.filter({ $0 != .foo })
答案 0 :(得分:2)
具有关联值的枚举不会隐式标记为Equatable。您必须要求它。但是,如果关联的值本身都是Equatable,那么您要做的就是全部(我相信从Swift 4.2开始)。
更改:
enum Test
收件人:
enum Test: Equatable
(注意:枚举是类型,应始终大写)
答案 1 :(得分:1)
那不是什么。在错误消息中是正确的。
Binary operator '!=' cannot be synthesized for enums with associated values
快速解答:
arr = arr.filter {
switch $0 {
case .foo: return true
default: return false
}
}
更紧凑的答案:
arr = arr.filter { if case .foo = $0 { return true } else { return false } }
更易于维护的答案:
如果test
中只有几个值,请将逻辑移到枚举中。
extension test {
var isFoo: Bool {
switch self {
case .foo: return true
default: return false
}
}
var isBar: Bool {
switch self {
case .bar: return true
default: return false
}
}
}
arr = arr.filter { $0.isFoo }