Skip to content

Latest commit

 

History

History
40 lines (28 loc) · 1.7 KB

pattern-assign.adoc

File metadata and controls

40 lines (28 loc) · 1.7 KB

使用 assign 创建一个订阅者

目的
  • 使用管道的结果来设置值,这个值通常是位于用户界面或控制组件上的属性,不过任何符合 KVO 的对象都可以提供该值。

参考
另请参阅
代码和解释

Assign 是专门设计用于将来自发布者或管道的数据应用到属性的订阅者,每当它收到数据时都会更新该属性。 与 sink 一样,它创建时激活并请求无限数据。 Assign 要求将失败类型指定为 <Never>,因此,如果你的管道可能失败(例如使用 tryMap 等操作符),则需要在使用 .assign 之前 patterns.adoc

简单的 assign 例子
let cancellablePipeline = publishingSource (1)
    .receive(on: RunLoop.main) (2)
    .assign(to: \.isEnabled, on: yourButton) (3)

cancellablePipeline.cancel() (4)
  1. .assign 通常在创建时链接到发布者,并且返回值是可取消的。

  2. 如果 .assign 被用于更新用户界面的元素,则需要确保在主线程更新它。这个调用确保了订阅者是在主线程上接收数据的。

  3. Assign 持有对使用 key path 更新的属性的引用,以及对正在更新的对象的引用。

  4. 在任何时候,你都可以调用 cancel() 终止和使管道失效。通常,当把从管道中更新的对象(如 viewController)销毁时,我们会取消管道。