如何在 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)")
}
...
我想在 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)")
}
...