在使用合并进行实验时,我看到了用于保留订阅服务器的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)
或者主要是文体上的。这两种方法在测试中似乎都有效。
1条答案
按热度按时间gfttwv5a1#
如果您知道只需要一个对
AnyCancellable
的引用,那么您可以存储对该引用的直接引用,并避免使用Set<AnyCancellable>
除此之外,除了风格上的区别之外,没有什么区别。我更喜欢
store(in:)
,以避免使用局部变量来保持可读性。(当然,你可以 * 将管道的返回值 Package 在Controller.cancellables.insert
中,但这只是非常丑陋的IMO。)我仍然推荐使用
store(in:)
方法,这样如果您最终需要保留更多的AnyCancellable
引用,您就不需要更改您的实现。