Проигнорируйте последнее значение, если оно было похоже на предыдущее в среде оператора объединения - PullRequest
0 голосов
/ 01 мая 2020

У меня есть логическое свойство для опубликованного, затем я подписываюсь на этого издателя, каждый раз, когда меняется логическое значение, мой издатель отправляет новое значение

@Published var booleanProperty: Bool = false
let subscription = $booleanProperty
     .sink { newBool in
        print(newBool)
     }

мой вопрос, есть ли оператор игнорирует значение публикации, если оно было похоже на последнее.

как издатель отправляет [true, true, false, false] Я просто получаю [true, false]

1 Ответ

0 голосов
/ 01 мая 2020

Вам нужно removeDuplicates:

let subscription = $booleanProperty
    .removeDuplicates()
    .sink { newBool in
        print(newBool)
    }

Из документации (выделено мое):

Публикует только элементы, которые не соответствуют предыдущий элемент.

[...]

Поскольку двухэлементная память рассматривает только текущий элемент и предыдущий элемент, оператор печатает последние 0 в данных примера, поскольку его непосредственным предшественником является 4 .

let numbers = [0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 0]
cancellable = numbers.publisher
    .removeDuplicates()
    .sink { print("\($0)", terminator: " ") }

// Prints: "0 1 2 3 4 0"
...