如何在 SwiftUI 文本元素中创建可变字符串?

How can i create mutable Strings in SwiftUI Text elements?

我想在 SwiftUI 中显示一个具有可变字符串内容的文本(视图)。

@State var myvar : String = "Undefined"
var body: some view {
Text("Content: \(myvar)")
}

func abc() {
self.myvar = "Defined"
}

每当我调用 abc() 函数时,myvar 的值都不会更新。我已经使用 abc() 中的 debugPrint(self.myvar) 检查了这一点。

此代码在我的 ContentView.swift 中,而我在委托回调方法中从 HostingController.swift 调用 contentView.abc()。

是否有创建 mutable/changeable 字符串的解决方案,用于在 SwiftUI 中使用 "external"?

编辑:

来自 HostingController:

override var body: ContentView {
let contentView = ContentView().environmentObject(contentModel)
...
return contentView 

最后一行给出了错误“无法将某些视图类型的 return 表达式转换为 return 类型 ContentView”。 请注意,我在 WatchKit 上下文中工作,因此这是一个 Apple Watch 应用程序。

可以通过 environmentObject

创建视图模型 class 以保持 myvar 状态

class ViewModel: ObservableObject {
    @Published var myvar: String = "Undefined"
}

声明为SceneDelegate的成员

let contentModel = ViewModel()

在添加到托管控制器之前将其传递到内容视图

let contentView = ContentView().environmentObject(contentModel)

更改其他场景委托(或通过引用传递的其他地方)

self.contentModel.myvar = "Defined"

在 ContentView 中使用

struct ContentView: View {
    @EnvironmentObject var viewModel: ViewModel

    var body: some view {
        Text("Content: \(viewModel.myvar)")
    }
    ...