Function SwiftUI:点击切换按钮并更改变量状态时调用函数

Function SwiftUI:点击切换按钮并更改变量状态时调用函数,function,binding,swiftui,state,toggle,Function,Binding,Swiftui,State,Toggle,我知道关于这个话题已经有了一条线索(),但我尝试了每一个答案,但没有任何效果 首先,我的代码: struct ContentView: View { @State private var isOn = false var body: some View { NavigationView{ VStack{ ZStack {

我知道关于这个话题已经有了一条线索(),但我尝试了每一个答案,但没有任何效果

首先,我的代码:

struct ContentView: View {
    
    @State private var isOn = false
    
    
    var body: some View {
        
        NavigationView{
            VStack{
                ZStack {
                    Form{
                        // HERE THE IMPORTANT PART

                        Toggle(isOn: %isOn) {
                            Text(isOn ? "On" : "Off")
                            
                            /*if(isOn){
                                Text("\(sendState(state: isOn))")
                            }else{
                                Text("\(sendState(state: isOn))")
                            }*/
                              //--> that is a workaround but doesn't work for me because the function send something to the server and that should only happen when the Toggle State is changed but now the function is called every time the view is changed//


                        }
                    }
                }
            }
            
    func sendState(state: Bool){
        if state{
            mqttClient.publish("rpi/gpio", withString: "on")
            print("Published ON")
        }else{
            mqttClient.publish("rpi/gpio", withString: "off")
            print("Published OFF")
        }
    }
}
所以,我想做的是在我点击切换时调用函数sendState(state:isOn),并且isOn的状态变为true或false。我尝试了willSet、didSet、自己的绑定扩展和其他一些东西,但没有像我上面所说的那样有效


有人能帮我吗?

SwiftUI 2.0

Xcode 12/iOS 14

简单到

Toggle(isOn: $isOn) {
    Text(isOn ? "On" : "Off")
}.onChange(of: isOn) {
    self.sendState(state: $0)
}
SwiftUI 1.0+(仍然有效)

有点复杂

Toggle(isOn: $isOn) {
    Text(isOn ? "On" : "Off")
}.onReceive([isOn].publisher.first()) {
    self.sendState(state: $0)
}

SwiftUI 2.0

Xcode 12/iOS 14

简单到

Toggle(isOn: $isOn) {
    Text(isOn ? "On" : "Off")
}.onChange(of: isOn) {
    self.sendState(state: $0)
}
SwiftUI 1.0+(仍然有效)

有点复杂

Toggle(isOn: $isOn) {
    Text(isOn ? "On" : "Off")
}.onReceive([isOn].publisher.first()) {
    self.sendState(state: $0)
}

非常感谢,我之前试过了,但没有成功,但现在成功了。谢谢!非常感谢,我之前试过了,但没有成功,但现在成功了。谢谢!