Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五

Combine 系列

  1. Swift Combine 从入门到精通一
  2. Swift Combine 发布者订阅者操作者 从入门到精通二
  3. Swift Combine 管道 从入门到精通三
  4. Swift Combine 发布者publisher的生命周期 从入门到精通四
    在这里插入图片描述

1. 操作符 operations

操作符是 Apple 参考文档中发布者下包含的一些预构建函数的便捷名称。 操作符用来组合成管道。 许多操作符会接受开发人员的一个或多个闭包,以定义业务逻辑,同时保持并持有发布者/订阅者的生命周期。

一些操作符支持合并来自不同管道的输出、更改数据的时序或过滤所提供的数据。 操作符可能还会对操作类型有限制, 还可用于定义错误处理和重试逻辑、缓冲和预先载入以及支持调试。

1.1 Mapping elements

  • scan
  • tryScan
  • setFailureType
  • map
  • tryMap
  • flatMap

1.2 Filtering elements

  • compactMap
  • tryCompactMap
  • replaceEmpty
  • filter
  • tryFilter
  • replaceError
  • removeDuplicates
  • tryRemoveDuplicates

1.3 Reducing elements

  • collect
  • reduce
  • tryReduce
  • ignoreOutput

1.4 Mathematic operations on elements

  • max
  • tryMax
  • count
  • min
  • tryMin

1.5 Applying matching criteria to elements

  • allSatisfy
  • tryAllSatisfy
  • contains
  • containsWhere
  • tryContainsWhere

1.6 Applying sequence operations to elements

  • firstWhere
  • tryFirstWhere
  • first
  • lastWhere
  • tryLastWhere
  • last
  • dropWhile
  • tryDropWhile
  • dropUntilOutput
  • prepend
  • drop
  • prefixUntilOutput
  • prefixWhile
  • tryPrefixWhile
  • output

1.7 Combining elements from multiple publishers

  • combineLatest
  • merge
  • zip

1.8 Handling errors

  • catch
  • tryCatch
  • assertNoFailure
  • retry
  • mapError

1.9 Adapting publisher types

  • switchToLatest
  • eraseToAnyPublisher

1.10 Controlling timing

  • debounce
  • delay
  • measureInterval
  • throttle
  • timeout

1.11 Encoding and decoding

  • encode
  • decode

1.12 Working with multiple subscribers

  • multicast

1.13 Debugging

  • breakpoint
  • handleEvents
  • print

2. Subjects

Subjects 是一种遵循 Subject 协议的特殊的发布者。 这个协议要求 subjects 有一个 .send(_:) 方法,来允许开发者发送特定的值给订阅者或管道。

Subjects 可以通过调用 .send(_:) 方法来将值“注入”到流中, 这对于将现有的命令式的代码与 Combine 集成非常有用。

一个 subject 还可以向多个订阅者广播消息。 如果多个订阅者连接到一个 subject,它将在调用 send(_ 时向多个订阅者发送值。 一个 subject 还经常用于连接或串联多个管道,特别是同时给多个管道发送值时。

Subject 不会盲目地传递其订阅者的需求。 相反,它为需求提供了一个聚合点。 在没有收到订阅消息之前,一个 subject 不会向其连接的发布者发出需求信号。 当它收到订阅者的需求时,它会向它连接的发布者发出 unlimited 需求信号。 虽然 subject 支持多个订阅者,但任何未请求数据的订阅者,在请求之前均不会给它们提供数据。

Combine 中有两种内建的 subject : CurrentValueSubject 和 PassthroughSubject。 它们的行为类似,但不同的是 CurrentValueSubject 需要一个初始值并记住它当前的值,PassthroughSubject 则不会。 当调用 .send() 时,两者都将向它们的订阅者提供更新的值。

在给遵循 ObservableObject 协议的对象创建发布者时,CurrentValueSubjectPassthroughSubject 也很有用。 SwiftUI 中的多个声明式组件都遵循这个协议。

参考

https://heckj.github.io/swiftui-notes/index_zh-CN.html

代码

https://github.com/heckj/swiftui-notes

你可能感兴趣的:(iOS,swift,开发语言,ios,combine,operation,subjects)