Swiftui 将@State变量传递给类,以便它可以对其进行更改
下面的代码就是我试图尝试的。我想将@State myName传递给类,并允许在按下按钮时对其进行更改。还有很多,这是我唯一坚持的部分。当我运行这个程序时,没有错误,但它什么也不做。如果我将其更改为self.helper.fieldBeingEdited=self.$myName,则会给出一个错误。类帮助器中有更多的代码,看起来它必须是一个类,而不是一个结构。有没有一个简单的方法可以做到这一点 我还应该提到,最后,多个文本字段将使用同一个Helper,每个文本字段都将@State变量发送给Helper,由changeField进行更改 更新问题,以澄清我试图实现的目标: 我希望TextField更改myName,并希望将myName传递给一个类,该类可以通过按下按钮来修改myName。但是我也希望能够将otherName传递给同一个helper类Swiftui 将@State变量传递给类,以便它可以对其进行更改,swiftui,Swiftui,下面的代码就是我试图尝试的。我想将@State myName传递给类,并允许在按下按钮时对其进行更改。还有很多,这是我唯一坚持的部分。当我运行这个程序时,没有错误,但它什么也不做。如果我将其更改为self.helper.fieldBeingEdited=self.$myName,则会给出一个错误。类帮助器中有更多的代码,看起来它必须是一个类,而不是一个结构。有没有一个简单的方法可以做到这一点 我还应该提到,最后,多个文本字段将使用同一个Helper,每个文本字段都将@State变量发送给Help
我认为这将实现您可能有疑问的目标: 类助手:observeObject{ var fieldBeingEdited:Binding=.constantinit 函数变换域{ fieldBeingEdited.wrappedValue=其他内容 } } 结构ContentView:View{ @State var myName=John @State var otherName=Paul @StateObject var helper=helper var body:一些观点{ VStack{ text字段您的姓名,text:$myName .ontapsigne{ self.helper.fieldBeingEdited=self.$myName } text字段其他名称,text:$otherName .ontapsigne{ self.helper.fieldBeingEdited=self.$otherName } 按钮操作:{ self.helper.changeField } { 文本更改 } } } }
请记住,ONTAPPORATION并不是激活文本字段的唯一方式,因此您最好使用文本字段的编辑回调来设置要编辑的字段。我认为这将实现您可能有疑问的目标: 类助手:observeObject{ var fieldBeingEdited:Binding=.constantinit 函数变换域{ fieldBeingEdited.wrappedValue=其他内容 } } 结构ContentView:View{ @State var myName=John @State var otherName=Paul @StateObject var helper=helper var body:一些观点{ VStack{ text字段您的姓名,text:$myName .ontapsigne{ self.helper.fieldBeingEdited=self.$myName } text字段其他名称,text:$otherName .ontapsigne{ self.helper.fieldBeingEdited=self.$otherName } 按钮操作:{ self.helper.changeField } { 文本更改 } } } }
请记住,OnTap手势并不是激活文本字段的唯一方式,因此,您最好使用TextField的编辑回调来设置fieldBeingEdited。我不太明白您想做什么,但是SwiftUI结构不应该初始化对象,除非使用@StateObject包装属性,在这种情况下,您不需要ObserveObject。当一个结构被包装在@State中时,它可以被修改,您应该使用一个结构将视图需要的所有状态属性组合到一个配置中,如下所示:
struct ContentViewConfig {
var myName = "John"
var otherName = "Paul"
var fieldBeingEdited: String = ""
mutating func changeField() {
fieldBeingEdited = "Something else"
}
}
struct ContentView: View {
@State var config = ContentViewConfig()
var body: some View {
VStack {
TextField("Your Name", text: $config.myName)
.onTapGesture {
config.fieldBeingEdited = "Your Name"
}
TextField("Other Name", text: $config.otherName)
.onTapGesture {
config.fieldBeingEdited = "Other Name"
}
Button(action: {
config.changeField()
}) {
Text("Change")
}
}
}
}
我真的不明白您想做什么,但是SwiftUI结构不应该初始化对象,除非用@StateObject包装属性,在这种情况下,您不需要ObserveObject。当一个结构被包装在@State中时,它可以被修改,您应该使用一个结构将视图需要的所有状态属性组合到一个配置中,如下所示:
struct ContentViewConfig {
var myName = "John"
var otherName = "Paul"
var fieldBeingEdited: String = ""
mutating func changeField() {
fieldBeingEdited = "Something else"
}
}
struct ContentView: View {
@State var config = ContentViewConfig()
var body: some View {
VStack {
TextField("Your Name", text: $config.myName)
.onTapGesture {
config.fieldBeingEdited = "Your Name"
}
TextField("Other Name", text: $config.otherName)
.onTapGesture {
config.fieldBeingEdited = "Other Name"
}
Button(action: {
config.changeField()
}) {
Text("Change")
}
}
}
}
是的,这就成功了。我只是用“取消”、“清除”和“完成”按钮创建一个键盘附件视图。SwiftUI结构不应该初始化对象,现在它们不再需要初始化对象,使用新的@StateObject。我已经更新了答案。是的,这成功了。我只是用“取消”、“清除”和“完成”按钮创建一个键盘附件视图。SwiftUI结构不应该初始化对象,现在它们不再需要初始化对象,使用新的@StateObject。我已经更新了答案。