gpt4 book ai didi

swift - 是否有替代Combine 的@Published 的替代方法,在它发生之后而不是之前发出值变化的信号?

转载 作者:行者123 更新时间:2023-12-03 09:19:24 24 4
gpt4 key购买 nike

我想使用Combine的 @Published 属性来响应属性的变化,但它似乎在属性发生变化之前发出信号,例如 willSet观察者。以下代码:

import Combine

class A {
@Published var foo = false
}

let a = A()
let fooSink = a.$foo.dropFirst().sink { _ in // `dropFirst()` is to ignore the initial value
print("foo is now \(a.foo)")
}

a.foo = true

输出:

foo is now false



我希望水槽在属性改变后运行,就像 didSet观察者,以便 foo在那一点上是正确的。是否有替代的发布者发出信号,或者有一种制作方式 @Published这样工作?

最佳答案

除了 Eluss 很好的解释之外,我将添加一些有效的代码。您需要创建自己的 PassthroughSubject制作发布者,并使用属性观察器didSet在更改发生后发送更改。

import Combine

class A {
public var fooDidChange = PassthroughSubject<Void, Never>()

var foo = false { didSet { fooDidChange.send() } }
}

let a = A()
let fooSink = a.fooDidChange.sink { _ in
print("foo is now \(a.foo)")
}

a.foo = true

关于swift - 是否有替代Combine 的@Published 的替代方法,在它发生之后而不是之前发出值变化的信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58403338/

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