Combine-Dropping values 的用法

Dropping values 主要用途是将特定的值丢掉,丢掉的条件有以下三种用法。

dropFirst

dropFirst 里面可以带一个 interger的参数,来决定 publisher 发出来的元素从地一个开始数地几个。

    publisher      .dropFirst(2)      .sink(receiveValue: { print($0) })      .store(in: &subscriptions)

interger可以不带参数,那么就是预设的只drop 第一个元素。

    publisher      .dropFirst()      .sink(receiveValue: { print($0) })      .store(in: &subscriptions)

关于 dropFirst 事实上在 Sequence 里面有一个类似的方法,而概念是一样的,也就是 drop 指定数量的元素。可以看这个延伸阅读。

drop(while:)

里面带一个 closure,这个 closure 返回一个 Bool,当这个 Bool 为true 之前,前面的元素通通drop。反之则保留。

  publisher    .drop(while: {      return $0 % 5 != 0    })    .sink(receiveValue: { print($0) })    .store(in: &subscriptions)

可以注意的是,你可能会认为这个跟 filter 很像。但是他们其实是完全不一样的东西。
这个方法比较特殊,drop 的条件不是判断当前 publisher抛出的元素,而是判断另外一个 publisher的讯号。drop 只要通过了closure的验证,后面就会全部通过。 而 filter 不一样,每一个元素都需要通过closure的验证。

drop(untilOutputFrom:)

let upstream = PassthroughSubject<Int,Never>()let second = PassthroughSubject<String,Never>()cancellable = upstream    .drop(untilOutputFrom: second)    .sink { print("\($0)", terminator: " ") }upstream.send(1)upstream.send(2)second.send("A")upstream.send(3)upstream.send(4)

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章