ff1*_*f10 3 swift swiftui combine
考虑以下代码(您可以直接将其 c&p 到操场中):
class Foo: ObservableObject {
@Published var bar = "bar"
}
let foo = Foo()
let someSubscriber = foo.$bar
.sink { value in
print("value is \(value)")
}
Run Code Online (Sandbox Code Playgroud)
尽管 Foo 刚刚初始化一次并且它的成员bar
从未改变,但接收器receiveValue
立即执行它的关闭。有什么办法可以防止这个初始调用发生,例如,有没有我可能忽略的操作员?
您可以使用dropFirst
运算符。没有参数,它只丢弃来自上游的第一个输出。
let someSubscriber = foo.$bar
.dropFirst()
.sink { value in
print("value is \(value)")
}
Run Code Online (Sandbox Code Playgroud)
要解决评论中提出的问题:
的每个实现都Publisher
可以决定如何处理每个新订阅者。这是一个政策决定,通常不是设计缺陷。不同Publisher
的人做出不同的决定。这里有些例子:
PassthroughSubject
不会立即发布任何内容。CurrentValueSubject
立即发布其当前值。NSObject.KeyValueObservingPublisher
当且仅当使用.initial
选项创建时,立即发布观察属性的当前值。Published.Publisher
(这是您为@Published
属性获得的类型)立即发布属性的当前值。 归档时间: |
|
查看次数: |
378 次 |
最近记录: |