首页 > 解决方案 > 如果它与之前的值相似,则忽略最后一个值,运算符组合框架

问题描述

我有一个已发布的布尔属性,然后我订阅该发布者,每次布尔值更改时,我的发布者都会发送一个新值

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

我的问题是,如果它与最新的相似,是否有运营商忽略出版价值。

像发布者发送 [true,true, false, false] 我只是得到 [true,false]

标签: iosswiftcombine

解决方案


你需要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"

推荐阅读