![](/img/trans.png)
[英]SwiftUI - Conditional based on ObservedObject doesn't work in subsequent Views
[英]SwiftUI: Why doesn't ObservedObject work in AppDelegate?
我已经尝试过ObservableObject 文档中的示例。
class Contact: ObservableObject {
@Published var name: String = "me"
@Published var age: Int = 7
}
当我使用代码制作 Swift 游乐场时:
let c = Contact()
c.objectWillChange.sink { print("This prints") }
c.age += 1
objectWillChange
触发并打印行。
到目前为止,一切都很好。
我现在在 SwiftUI 中创建一个视图:
struct ContentView: View {
@ObservedObject var contact = Contact
...
我在 AppDelegate 中创建此视图,然后执行以下操作:
contentView.contact.objectWillChange.sink { print("This doesn't print.") }
我已将联系人连接到各种控件,更改任何字段都会更新所有控件。 执行onReceive(contact.objectWillChange)
也可以。 但没有在 AppDelegate 中连接到它。 我尝试记录deinit()
以确保我们谈论的是相同的 object。 我试过使用ImmediateScheduler
。 没有骰子。 为什么这不起作用?
当您使用.sink
创建订阅时,您必须保存返回的AnyCancellable
object
let cancellable = publisher.sink { ... }
如果将其分配给变量,请确保它不是短暂的。 一旦可取消的 object 被解除分配,订阅也将被取消。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.