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

8cdiaqws  于 2023-03-28  发布在  Swift
关注(0)|答案(1)|浏览(160)

在使用合并进行实验时,我看到了用于保留订阅服务器的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)

或者主要是文体上的。这两种方法在测试中似乎都有效。

gfttwv5a

gfttwv5a1#

如果您知道只需要一个对AnyCancellable的引用,那么您可以存储对该引用的直接引用,并避免使用Set<AnyCancellable>
除此之外,除了风格上的区别之外,没有什么区别。我更喜欢store(in:),以避免使用局部变量来保持可读性。(当然,你可以 * 将管道的返回值 Package 在Controller.cancellables.insert中,但这只是非常丑陋的IMO。)
我仍然推荐使用store(in:)方法,这样如果您最终需要保留更多的AnyCancellable引用,您就不需要更改您的实现。

相关问题