我考虑有什么区别
@Published var isLoggedIn: Bool = false
var isLoggedIn: AnyPublisher<Bool, Never>
Run Code Online (Sandbox Code Playgroud)
我知道在第一种情况下,我可以直接在 SwiftUI View 中使用它,即使用 $ 符号创建绑定,然后例如使用if $isLoggedIn.animation()
但我怎样才能实现同样的目标,AnyPublisher<Bool, Never>似乎我需要在某个地方调用allocate或sink和store()。为了让它发挥作用。因此,在 SwiftUI 中从它创建绑定似乎是不可能的if $isLoggedIn.animation
@Published 的限制是我无法进行自定义观察。例如 UserDefaults,我可以通过 UserDefaults.publisher 中的 AnyPublisher 来完成。
现在看来我需要两者都拥有并进行AnyPublisher更新@Published var
但我认为 @Published 是在常规 AnyPublisher 之下的属性包装器,那么为什么我不能直接从 AnyPublisher 在 SwiftUI 视图中进行绑定?
联合体@Published是一个由属性包装器包装的发布者。这为它提供了$SwiftUI 工作所依赖的前缀属性和其他功能。
财产也根本@Published不像财产。总是有一种故障类型,也可能有其他故障情况。AnyPublisher@PublishedNeverAnyPublisher
@Published具有状态感/当前值,但 的情况并非如此AnyPublisher。ACurrentValueSubject会最接近,但这不起作用,因为@Published可以用作绑定,而CurrentValueSubject. 一个重要的区别是 SwiftUI 可以@Published直接为属性分配新值(isLoggedIn = true将在此处触发更改)。
要在 SwiftUI 中与发布商合作,您需要将其值分配给专用@Published属性,如您在原始问题中提到的那样。
| 归档时间: |
|
| 查看次数: |
3285 次 |
| 最近记录: |