如何在类之间传递@State变量?
How to pass the @State variable between classes?
根据本教程:https://www.simpleswiftguide.com/swiftui-textfield-complete-tutorial/ 每当您将输入传递给 TextField 时,它都会“保存”在您添加到 TextField 的变量中。如何在类之间传递新值呢?
代码:
import SwiftUI
struct ContentView: View {
@State var input: String = ""
var body: some View {
NavigationView{
VStack {
Text("Enter your text here:")
TextField("Enter Text", text:$input)
.multilineTextAlignment(.center)
NavigationLink(destination:FinalView()){
Text("Run")
}
}
}
}
}
struct FinalView: View {
var body: some View {
Text(ContentView().input)
}
}
我没有收到任何错误并且运行顺利,但是 FinalView()
中没有输出(sheet 为空白)。
这只是我在更复杂的应用程序中遇到的问题的最小可行版本,所以请不要寻找解决方法,而是帮助我寻找确切的答案或证明它根本不可行.谢谢!
如果FinalView
不需要改变变量,那么你可以将它作为参数传递:
struct ContentView: View {
@State var input: String = ""
var body: some View {
NavigationView{
VStack {
Text("Enter your text here:")
TextField("Enter Text", text:$input)
.multilineTextAlignment(.center)
NavigationLink(destination:
FinalView(input: input)
){
Text("Run")
}
}
}
}
}
struct FinalView: View {
var input : String
var body: some View {
Text(input)
}
}
如果你需要双向通信(例如子视图需要改变变量),你可以使用@Binding
:
struct ContentView: View {
@State var input: String = ""
var body: some View {
NavigationView{
VStack {
Text("Enter your text here:")
TextField("Enter Text", text:$input)
.multilineTextAlignment(.center)
NavigationLink(destination:
FinalView(input: $input)
){
Text("Run")
}
}
}
}
}
struct FinalView: View {
@Binding var input : String
var body: some View {
TextField("", text: $input)
}
}
请注意,尝试进入父视图 (ContentView().input
) 将 无效 -- 创建一个 新实例 的 ContentView
与您期望的 input
不同。
不相关的旁注:你的层次结构中应该只有 一个 NavigationView
-- 我已经删除了 FinalView
[=19= 中的那个]
根据本教程:https://www.simpleswiftguide.com/swiftui-textfield-complete-tutorial/ 每当您将输入传递给 TextField 时,它都会“保存”在您添加到 TextField 的变量中。如何在类之间传递新值呢?
代码:
import SwiftUI
struct ContentView: View {
@State var input: String = ""
var body: some View {
NavigationView{
VStack {
Text("Enter your text here:")
TextField("Enter Text", text:$input)
.multilineTextAlignment(.center)
NavigationLink(destination:FinalView()){
Text("Run")
}
}
}
}
}
struct FinalView: View {
var body: some View {
Text(ContentView().input)
}
}
我没有收到任何错误并且运行顺利,但是 FinalView()
中没有输出(sheet 为空白)。
这只是我在更复杂的应用程序中遇到的问题的最小可行版本,所以请不要寻找解决方法,而是帮助我寻找确切的答案或证明它根本不可行.谢谢!
如果FinalView
不需要改变变量,那么你可以将它作为参数传递:
struct ContentView: View {
@State var input: String = ""
var body: some View {
NavigationView{
VStack {
Text("Enter your text here:")
TextField("Enter Text", text:$input)
.multilineTextAlignment(.center)
NavigationLink(destination:
FinalView(input: input)
){
Text("Run")
}
}
}
}
}
struct FinalView: View {
var input : String
var body: some View {
Text(input)
}
}
如果你需要双向通信(例如子视图需要改变变量),你可以使用@Binding
:
struct ContentView: View {
@State var input: String = ""
var body: some View {
NavigationView{
VStack {
Text("Enter your text here:")
TextField("Enter Text", text:$input)
.multilineTextAlignment(.center)
NavigationLink(destination:
FinalView(input: $input)
){
Text("Run")
}
}
}
}
}
struct FinalView: View {
@Binding var input : String
var body: some View {
TextField("", text: $input)
}
}
请注意,尝试进入父视图 (ContentView().input
) 将 无效 -- 创建一个 新实例 的 ContentView
与您期望的 input
不同。
不相关的旁注:你的层次结构中应该只有 一个 NavigationView
-- 我已经删除了 FinalView
[=19= 中的那个]