【发布时间】:2021-07-16 21:05:43
【问题描述】:
我有一组传统的UIViewControllers 和UIViews,我将Publisher 传递给:
class MyModel : ObservableObject {
@Published var product: Product?
}
…
let someView = SomeView(product: self.model.$product)
…
class SomeView : UIView {
init(product: Published<Product?>.Publisher) {
self.sub = product.sink { prod in <do stuff when it changes> }
}
我只需要在视图初始化时对MyModel.product 的属性之一执行一次操作,而不需要 每次product 更新。有没有这样的:
self.pub = product
.sinkOnSub { prod in <do when creating this subscription> }
.sinkRemaining { prod in <do subsequent times> }
【问题讨论】:
-
出于好奇,如果您只在订阅时需要它,为什么还要在发布者链中进行呢?为什么不直接在
self.sub =之前就行呢? -
@jnpdx 我不知道如何进入实际领域。我所拥有的只是
Publisher。有办法吗? -
啊,我明白了。有趣的问题。
-
我会使用
scan并传递一个元组来指示哪个是第一个。 -
或者只使用
handleEvents来检测我们何时订阅。