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],则无需更改实施=] 参考资料。
试验 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],则无需更改实施=] 参考资料。