当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Optional.Publisher tryRemoveDuplicates(by:)用法及代码示例


实例方法

tryRemoveDuplicates(by:)

仅发布与前一个元素不匹配的元素,由提供的 error-throwing 闭包评估。

声明

func tryRemoveDuplicates(by predicate: @escaping (Self.Output, Self.Output) throws -> Bool) -> Publishers.TryRemoveDuplicates<Self>

返回值

使用(而不是发布)重复元素的发布者。

参数

predicate

用于评估两个元素是否等效的闭包,用于过滤。从此闭包中返回 true 以指示第二个元素是第一个元素的副本。如果此闭包抛出错误,则发布者会以抛出的错误终止。

详述

使用 Publisher/tryRemoveDuplicates(by:) 根据您提供的 error-throwing 闭包对元素的评估,从上游发布者中删除重复元素。如果您的闭包引发错误,则发布者会因错误而终止。

在下面的示例中,提供给 Publisher/tryRemoveDuplicates(by:) 的闭包在两个连续元素相等时返回 true,从而过滤掉 0123 。但是,闭包在遇到 4 时会引发错误。然后发布者终止并出现此错误。


struct BadValuesError: Error {}
let numbers = [0, 0, 0, 0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
cancellable = numbers.publisher
    .tryRemoveDuplicates { first, second -> Bool in
        if (first == 4 && second == 4) {
            throw BadValuesError()
        }
        return first == second
    }
    .sink(
        receiveCompletion: { print ("\($0)") },
        receiveValue: { print ("\($0)", terminator: " ") }
     )


 // Prints: "0 1 2 3 4 failure(BadValuesError()"

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional.Publisher tryRemoveDuplicates(by:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。