gpt4 book ai didi

swiftui - ObservableObject 中的 @Published 和普通 AnyPublisher 属性有什么区别

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

我考虑一下有什么区别

@Published var isLoggedIn: Bool = false 

var isLoggedIn: AnyPublisher<Bool, Never>

我知道在第一种情况下,我可以直接在 SwiftUI View 中使用它,即使用 $ 符号创建绑定(bind),然后例如使用 if $isLoggedIn.animation()

但是我怎样才能用 AnyPublisher<Bool, Never> 达到同样的效果呢?看来我需要在某个地方调用assignsinkstore()。让它发挥作用。所以在 SwiftUI 中从它创建绑定(bind)似乎是不可能的 if $isLoggedIn.animation

@Published 的局限性在于我无法自定义观察。例如,我可以通过 UserDefaults.publisher 中的 AnyPublisher 执行 UserDefaults。

现在看来我需要同时拥有两者并制作AnyPublisher更新@Published var

但我认为 @Published 是常规 AnyPublisher 下的属性包装器,所以为什么我不能直接从 AnyPublisher 在 SwiftUI View 中进行绑定(bind)?

最佳答案

Combine 的 @Published 是一个由属性包装器包装的发布者。这为它提供了 $ 前缀属性和 SwiftUI 工作所依赖的其他功能。

@Published 属性也根本不像 AnyPublisher@Published 始终将 Never 作为其失败类型,AnyPublisher 可以有其他失败情况。

@Published 具有状态感/当前值,而 AnyPublisher 则不是这种情况。 CurrentValueSubject 最接近,但这不起作用,因为 @Published 可以用作绑定(bind),而这对于 CurrentValueSubject 是不可能的。一个重要的区别是 SwiftUI 可以直接为 @Published 属性分配新值(isLoggedIn = true 会在此处触发更改)。

要在 SwiftUI 中与您的发布者合作,您需要将他们的值分配给您在原始问题中提到的专用 @Published 属性。

关于swiftui - ObservableObject 中的 @Published 和普通 AnyPublisher 属性有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60560933/

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