如何从枚举的快速数组中删除值

时间:2018-10-25 15:37:06

标签: swift3

类似于此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 })

2 个答案:

答案 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 }