在SwiftUI中观察文本或将字符串传递给ViewModel有多种方法。以下是一些常用的方法:
@State
属性包装器:可以使用@State
属性包装器将字符串作为状态变量存储在视图中,并在视图内部进行修改。当字符串发生更改时,视图会自动重新渲染。例如:@State private var text: String = ""
var body: some View {
TextField("Enter text", text: $text)
.onReceive(Just(text)) { newValue in
// 在这里处理字符串变化
}
}
@ObservableObject
和@Published
属性包装器:可以创建一个ObservableObject的类作为ViewModel,并使用@Published
属性包装器将字符串作为可观察的属性。当字符串发生更改时,视图会自动重新渲染。例如:class ViewModel: ObservableObject {
@Published var text: String = ""
}
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
TextField("Enter text", text: $viewModel.text)
.onReceive(Just(viewModel.text)) { newValue in
// 在这里处理字符串变化
}
}
}
Binding
:可以将字符串作为Binding
参数传递给子视图或ViewModel,并在子视图或ViewModel中进行修改。当字符串发生更改时,父视图会自动重新渲染。例如:struct ContentView: View {
@State private var text: String = ""
var body: some View {
ChildView(text: $text)
}
}
struct ChildView: View {
@Binding var text: String
var body: some View {
TextField("Enter text", text: $text)
.onReceive(Just(text)) { newValue in
// 在这里处理字符串变化
}
}
}
这些方法可以根据具体的需求和场景选择使用。对于观察文本或将字符串传递给ViewModel,可以根据项目的规模和复杂性选择适合的方法。