如何根据布尔值 (SwiftUI) 更改对象的绑定源?

How do I change an object's binding source based on a boolean (SwiftUI)?

我有一个 ObservedObject,我根据来自表单 TextFields 的用户输入向其中传递值。但是,我希望用户可以选择使用 CoreLocation。当他们更改开关时,我希望 TextFields 之一的输入值切换到我的 CoreLocation 发布者。以下是代码片段:

@EnvironmentObject var locationManager: LocationManager
@ObservedObject var calculator: CalculatorObject
@State var useGPS: Bool = false

if self.useGPS {
   //I'm not sure what to put here
   //I’ve tried several options to set the binding element of the
   //   CalculatorObject to the speed object of the
   //   locationManager but they don’t change the values within
   //   the calculations. 
}

var body: Some View {
    VStack {
       Toggle(isOn: $useGPS) {
          Text("Use GPS for Ground Speed")
       }

       if useGPS {
          Text(locationManager.locationInfo.speed)
       } else {
          TextField("Ground Speed", text: self.$calculator.groundSpeed)
       }
    }
}

我尝试了多种不同的选择,但我似乎无法从位置管理器获取数据以将其数据传递给 CalculatorObject. 我已经验证,当我更改切换开关时,UI 显示变化速度,所以我确定位置发布者正在工作。我不清楚如何更改这里的绑定源。

我不确定我是否理解您的目标,但您可能希望得到类似以下内容...

   if useGPS {
      TextField("<Other_title_here>", text: self.$calculator.groundSpeed)
          .onAppear {
              self.calculator.groundSpeed = locationManager.locationInfo.speed
          }
   } else {
      TextField("Ground Speed", text: self.$calculator.groundSpeed)
   }

@Asperi 提供的答案为我指明了正确的方向,但没有与发布者正确合作。这是我所做的最终起作用的:

   if useGPS {
      TextField("<Other_title_here>", text: self.$calculator.groundSpeed)
           .onReceive(locationManager.objectWillChange, perform: { output in
               self.calculator.groundSpeed = output.speed
           })
   } else {
      TextField("Ground Speed", text: self.$calculator.groundSpeed)
   }

onReceive 函数中使用 locationManager.objectWillChange 发布者正确订阅了更改。

感谢@Asperi 为我指明了正确的方向。