Swiftui 无法将值应用于已发布的变量

Swiftui 无法将值应用于已发布的变量,swiftui,Swiftui,我很难给发布的变量赋值(weeklyAllowance)。 总共有4个变量,其中3个在按钮操作(文本字段)之外按预期工作 最后一个变量(WeeklyAllowance)必须通过操作按钮从中获取值 提前谢谢 class Users: ObservableObject { @Published var firstName = "" @Published var lastName = "" @Published var age = "" @Published var

我很难给发布的变量赋值(weeklyAllowance)。 总共有4个变量,其中3个在按钮操作(文本字段)之外按预期工作 最后一个变量(WeeklyAllowance)必须通过操作按钮从中获取值

提前谢谢

class Users: ObservableObject {

    @Published var firstName = ""
    @Published var lastName = ""
    @Published var age = ""
    @Published var weeklyAllowance = ""

}


import SwiftUI

struct ContentView: View {

    @ObservedObject  var myDetails = Users()

    var body: some View {

        NavigationView {
        VStack {

            TextField("Enter Firstname",text: $myDetails.firstName)
            TextField("Enter Lastname",text: $myDetails.lastName)
            TextField("Enter Age",text: $myDetails.age)

            Text("My name is \(myDetails.firstName)")
            Text("My Last name is \(myDetails.lastName)")
            Text("My age is \(myDetails.age)")
            //Spacer()

            VStack {
            //Now Update the details
            TextField("Name Update",text: $myDetails.lastName)
            Text("Lastname update \(myDetails.lastName)")
            }

            Spacer()
            //Link to new view
               Button(action: {

                //Assign period in the
                self.myDetails.objectWillChange.send()
                self.myDetails.weeklyAllowance = "Weekly"

               }) {

                NavigationLink(destination: detailUpdate(UpdateFirstname: $myDetails.firstName, UpdateLastname: $myDetails.lastName, UpdateAge: $myDetails.age,periodWkly: $myDetails.weeklyAllowance)) {

                    Text("The Link")

                }
               }
        }.padding()
        }
    }
}
这是一个更新测试

struct detailUpdate: View {

    @Binding var UpdateFirstname: String
    @Binding var UpdateLastname: String
    @Binding var UpdateAge: String
    @Binding var periodWkly : String

    var body: some View {

        VStack {

        Text("My First Name Update is \(UpdateFirstname)")
        Text("My Last Name Update is \(UpdateLastname)")
        Text("My Age Update is \(UpdateAge)")
        Text("This is a \(periodWkly) allowance")

        }.padding()
    }
}

在您的代码中,按钮不起作用,但直接作用于一个链接(将其放置在按钮标签中并不重要——点击激活链接,而不是按钮)

以下是单击按钮时激活链接的ContentView:

struct ContentView: View {

    @ObservedObject  var myDetails = Users()

    @State private var activatedLink = false
    var body: some View {

        NavigationView {
            VStack {

                TextField("Enter Firstname",text: $myDetails.firstName)
                TextField("Enter Lastname",text: $myDetails.lastName)
                TextField("Enter Age",text: $myDetails.age)

                Text("My name is \(myDetails.firstName)")
                Text("My Last name is \(myDetails.lastName)")
                Text("My age is \(myDetails.age)")
                //Spacer()

                VStack {
                    //Now Update the details
                    TextField("Name Update",text: $myDetails.lastName)
                    Text("Lastname update \(myDetails.lastName)")
                }

                Spacer()
                //Link to new view
                Button(action: {

                    //Assign period in the
                    self.myDetails.weeklyAllowance = "Weekly"
                    self.activatedLink = true

                }) {
                    Text("The Link")
                }
                NavigationLink(destination: detailUpdate(UpdateFirstname: $myDetails.firstName, UpdateLastname: $myDetails.lastName, UpdateAge: $myDetails.age, periodWkly: $myDetails.weeklyAllowance), isActive: $activatedLink) {
                    EmptyView()
                }
            }.padding()
        }
    }
}

在您的代码中,按钮不起作用,但直接作用于一个链接(将其放置在按钮标签中并不重要——点击激活链接,而不是按钮)

以下是单击按钮时激活链接的ContentView:

struct ContentView: View {

    @ObservedObject  var myDetails = Users()

    @State private var activatedLink = false
    var body: some View {

        NavigationView {
            VStack {

                TextField("Enter Firstname",text: $myDetails.firstName)
                TextField("Enter Lastname",text: $myDetails.lastName)
                TextField("Enter Age",text: $myDetails.age)

                Text("My name is \(myDetails.firstName)")
                Text("My Last name is \(myDetails.lastName)")
                Text("My age is \(myDetails.age)")
                //Spacer()

                VStack {
                    //Now Update the details
                    TextField("Name Update",text: $myDetails.lastName)
                    Text("Lastname update \(myDetails.lastName)")
                }

                Spacer()
                //Link to new view
                Button(action: {

                    //Assign period in the
                    self.myDetails.weeklyAllowance = "Weekly"
                    self.activatedLink = true

                }) {
                    Text("The Link")
                }
                NavigationLink(destination: detailUpdate(UpdateFirstname: $myDetails.firstName, UpdateLastname: $myDetails.lastName, UpdateAge: $myDetails.age, periodWkly: $myDetails.weeklyAllowance), isActive: $activatedLink) {
                    EmptyView()
                }
            }.padding()
        }
    }
}

您可能不必在按钮中嵌入navigationLink。直接用就行了

          NavigationLink(destination: detailUpdate(UpdateFirstname: $myDetails.firstName, UpdateLastname: $myDetails.lastName, UpdateAge: $myDetails.age,periodWkly: $myDetails.weeklyAllowance)) {     
              Text("The Link")
          }.onDisappear{
             self.myDetails.weeklyAllowance = "Weekly"
            }

您可能不必在按钮中嵌入navigationLink。直接用就行了

          NavigationLink(destination: detailUpdate(UpdateFirstname: $myDetails.firstName, UpdateLastname: $myDetails.lastName, UpdateAge: $myDetails.age,periodWkly: $myDetails.weeklyAllowance)) {     
              Text("The Link")
          }.onDisappear{
             self.myDetails.weeklyAllowance = "Weekly"
            }

我希望在我正在编写的浮动按钮菜单中集成代码。您的解决方案为我提供了选择。再次感谢你,我希望在我正在编写的浮动按钮菜单中集成代码。您的解决方案为我提供了选择。再次感谢你