AnyCancellable.store(in:) 优于 <AnyCancellable>Set.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:),以避免使用局部变量来保持可读性。(当然,可以将管道的返回值封装在Controller.cancellables.insert中,但这完全是丑陋的IMO。(

我仍然建议使用store(in:)方法,这样,如果您最终需要保留更多AnyCancellable引用,就不需要更改实现。

最新更新