gpt4 book ai didi

swift - 防止立即调用接收器接收值关闭

转载 作者:行者123 更新时间:2023-12-04 00:21:08 25 4
gpt4 key购买 nike

考虑以下代码(您可以直接将其 c&p 到操场中):

class Foo: ObservableObject {
@Published var bar = "bar"
}

let foo = Foo()
let someSubscriber = foo.$bar
.sink { value in
print("value is \(value)")
}

虽然 Foo 刚刚被初始化过一次并且它的成员是 bar从未改变,接收器执行它的 receiveValue立即关闭。有什么办法可以防止这个初始调用发生,例如有没有我可能忽略的运算符(operator)?

最佳答案

您可以使用 dropFirst运算符(operator)。没有任何参数,它只丢弃来自上游的第一个输出。

let someSubscriber = foo.$bar
.dropFirst()
.sink { value in
print("value is \(value)")
}

要解决评论中提出的问题:
Publisher的每个实现可以决定如何处理每个新订阅者。这是一个政策决定,通常不是设计缺陷。不同 Publisher做出不同的决定。这里有些例子:
  • PassthroughSubject不会立即发布任何内容。
  • CurrentValueSubject立即发布其当前值。
  • NSObject.KeyValueObservingPublisher当且仅当使用 .initial 创建时,立即发布观察属性的当前值选项。
  • Published.Publisher (这是您为 @Published 属性获得的类型)立即发布该属性的当前值。
  • 关于swift - 防止立即调用接收器接收值关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60568858/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com