ios - SwiftUI - 多个变量在变化时会相互反应吗?
问题描述
我有几个相互之间有特定关系的变量(即每个变量都可以通过数学函数相互转换)。它们都可以由用户调整,我希望它们都可以在其中一个更新时进行更改。例如:
struct SliderView: View {
@State var feet: Float = 0
@State var yards: Float = 0
@State var miles: Float = 0
var body: some View {
VStack {
Text("Feet = \(feet)")
Slider(value: $feet, in: 0...5280, step: 1)
Text("Yards = \(yards)")
Slider(value: $yards, in: 0...1760, step: 0.1)
Text("Miles = \(miles)")
Slider(value: $miles, in: 0...1, step: 0.0001)
}
}
}
我怎样才能使它改变一个变量会自动改变其他变量?
解决方案
我同意 Kyle Beard 的观点。这是一个例子:
class Model: ObservableObject {
var changing = false
@Published var feet: Float = 0 {
willSet {
guard !changing else {
return
}
self.changing.toggle()
self.miles = newValue / 5280
self.yards = newValue / 3
self.changing.toggle()
}
}
@Published var yards: Float = 0 {
willSet {
guard !changing else {
return
}
self.changing.toggle()
self.miles = newValue / 1760
self.feet = newValue * 3
self.changing.toggle()
}
}
@Published var miles: Float = 0 {
willSet {
guard !changing else {
return
}
self.changing.toggle()
self.feet = newValue * 5280
self.yards = newValue * 1760
self.changing.toggle()
}
}
}
struct ContentView: View {
@ObservedObject var model = Model()
var body: some View {
VStack {
Text("Feet = \(self.model.feet)")
Slider(value: self.$model.feet, in: 0...5280, step: 1)
Text("Yards = \(self.model.yards)")
Slider(value: self.$model.yards, in: 0...1760, step: 0.1)
Text("Miles = \(self.model.miles)")
Slider(value: self.$model.miles, in: 0...1, step: 0.0001)
}
}
}
我希望这有帮助。
推荐阅读
- laravel - Laravel:ValidationException::withMessages 未发送所有错误
- reactjs - 使用 React/Webpack 加载图像
- c++ - GLSL 照明数学搞砸了,找不到错误
- java - 将没有任何循环的 2D 数组的 C++ 递归填充实现转换为 Java?
- git - 如何在 .git/hooks/pre-commit 文件上提交我的更改
- git - Heroku 登录在 git bash 中无法正常工作
- algorithm - 如何使用优先队列?
- python - 无法将视图从主 Django 项目文件夹导入应用程序 views.py
- r - 尝试在 R 中创建带有箭头的图形,但不能将离散值应用于连续比例
- css - 下拉菜单在悬停时没有延迟。“引导程序4”