SwiftUI ObservedObject 每次都重新启动

SwiftUI ObservedObject is re-initiated everytime

我有一个简单的 class 可以在我的 SwiftUI 应用程序中存储一些数据:

final class UserData: ObservableObject  {
    @Published var id = 1
    @Published var name = "Name"
    @Published var description = "Initial text"
}

我在主应用程序结构中也将其定义为EnvironmentObject

ContentView(document: file.$document)
    .environmentObject(UserData())

在我的内容视图中,我嵌入了一个 UIKit 文本视图:

EditorTextView(document: $document.text)

其中 EditorTextView 是通过 UIViewRepresentable 应用的 UITextView

现在,我要做的是更新 EditorTextView 中的 UserData,例如,将一些用户输入存储到 UserData.description。所以我在我的 Coordinator 中定义了 class 如下(代码只是为了举例):

class Coordinator: NSObject, UITextViewDelegate {
    @ObservedObject var userData = UserData()
    ...
    // Somewhere in the code, I update UserData when user taps Enter:
    func textViewDidChange(_ textView: UITextView) {
        if (textView.text.last == "\n") {
            userData.description = "My New Text"
        }
    }

我的问题是:

尽管它已更新为“我的新文本”(如调试器所示),userData.description 的值将再次使用值“初始文本”重新启动。就像每次都创建 UserData class 一样。

我尝试使用@StateObject 而不是@ObservedObject,但这并没有什么不同。

“就像每次都创建 UserData class 一样。”

每次都创建,就在这里:

class Coordinator: NSObject, UITextViewDelegate {
    @ObservedObject var userData = UserData()  // <--- here

试试这个,从外部传入 UserData:

class Coordinator: NSObject, UITextViewDelegate {
    @ObservedObject var userData: UserData

通常您也会在主应用程序结构中执行此操作:

@StateObject var userData = UserData()
...
ContentView(document: file.$document).environmentObject(userData)