繁体   English   中英

SwiftUI:为什么 ObservedObject 在 AppDelegate 中不起作用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM