AnyCancellable.store(in:) 优于 Set<AnyCancellable>.insert(:)

Advantage of AnyCancellable.store(in:) over Set<AnyCancellable>.insert(:)

试验 Combine,我看到了 AnyCancellable.store(in:) 保留订阅者的方法。我一直在想这个设置:

class Controller
{
  static var cancellables = Set<AnyCancellable>()
}

let label = UILabel(frame: .zero)

如果这比保留 Subscriber 有优势:

Controller.$value
  .assign(to: \UILabel.text, on: label)
  .store(in: &cancellables)

关于这个:

let subscriber = Controller.$value
  .assign(to: \UILabel.text, on: label)

Controller.cancellables.insert(subscriber)

或者如果它主要是文体。两者似乎都可以在测试中使用。

如果您知道您只需要对 AnyCancellable 的一个引用,那么您可以存储对该 Set<AnyCancellable> 的直接引用]

除此之外,除文体外别无二致。我更喜欢 store(in:) 以避免使用局部变量来保持可读性。 (当然,您 可以 将管道的 return 值包装在 Controller.cancellables.insert 中,但这在 IMO 中是非常丑陋的。)

我仍然建议使用 store(in:) 方法,这样如果您 最终需要坚持更多 [=10],则无需更改实施=] 参考资料。