Как удалить значение из массива перечислений swift - PullRequest
0 голосов
/ 25 октября 2018

Аналогично этому Как удалить элемент с заданным значением из массива в Swift

, но для перечислений

как бы удалить значение с даннымenum (нативное быстрое перечисление, которое не позволяет сравнивать) из массива этих перечислений?

не может преобразовать это перечисление в Int, поскольку существуют некоторые параметризованные случаи

пример кода (который не позволяеткомпилировать):

    enum test
    {
        case foo
        case bar(baz: Locale)
    }

    var arr: [test] = [.foo, .bar(baz: Locale.current)]

    arr = arr.filter({ $0 != .foo })

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Перечисления со связанными значениями неявно помечаются как Equatable.Вы должны запросить это.Но это все, что вам нужно сделать, если соответствующие значения сами по себе равны (на мой взгляд, в Swift 4.2).

Изменение:

enum Test

на:

enum Test: Equatable

(Примечание: перечисления являются типами и всегда должны начинаться с заглавной буквы)

0 голосов
/ 25 октября 2018

Ну разве это не что-то.Это верно в сообщении об ошибке.

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 }
...