swift - SwiftUI Slider,如何更改第二个变量
问题描述
目前我的滑块只改变了我的 kms 变量,但我也希望它通过滑块每一步的百分比变量来增加或减少价格变量。有没有一种简单的方法来实现这一点?谢谢。
import SwiftUI
struct SliderStruct: View {
@State var kms: Double = 100_000
var kms2: Double = 100_000
var price: Double = 5_000
var percentage: Double = 0.05
var body: some View {
VStack{
//increase price by percentage as kms decrease, decrease price by percentage as kms increase
//price *= percentage, price /= percentage
Text("$\(self.price, specifier: "%.0f")")
Text("\(self.kms, specifier: "%.0f") Kms")
Slider(value: $kms, in: kms2 - kms2...kms2 + kms2, step: 20_000)
}
}
}
解决方案
这是一个有趣的问题,而且我以前从未尝试过,所以我快速尝试解决它(有点强迫它工作!),但要处理原始问题的限制。虽然,有些信息还是有点模糊。
class DistanceObject: ObservableObject {
@Published var kms: Double = 100_000
var kms2: Double = 100_000
var price: Double = 5_000
var pricePlaceHolder: Double = 5_000
var percentage: Double = 0.05
private var oldValue: Double = 100_000 // set to initial kms
func getPrice() -> Double {
if kms.truncatingRemainder(dividingBy: 20000) == 0.0 {
if kms != oldValue {
if kms < oldValue {
price = price + (pricePlaceHolder * percentage)
} else if kms > oldValue {
price = price - (pricePlaceHolder * percentage)
}
oldValue = kms
}
}
return price
}
func setPrice(price: Double) {
self.price = price
}
}
struct ContentView: View {
@ObservedObject var distance: DistanceObject = DistanceObject()
var body: some View {
let price_mod = Binding<Double>(
get: { return distance.getPrice() },
set: { distance.setPrice(price: $0) }
)
NavigationView {
VStack {
Text("$\(price_mod.wrappedValue, specifier: "%.0f")")
Text("\(distance.kms, specifier: "%.0f") Kms")
Slider(value: $distance.kms, in: distance.kms2 - distance.kms2...distance.kms2 + distance.kms2, step: 20_000)
}
}
}
}
我决定在 ContentView 中使用自定义绑定方法,并让该绑定在 ObservableObject 类对象中执行计算。这不是最好的解决方案,但这个和另一个答案应该让你朝着正确的方向前进。
推荐阅读
- c# - 如何在 Blazor CSS 隔离中使用多个范围?
- python - Django 在加载静态文件时查看“模板”
- docker - 如何设置 gitlab-runner 以在 gitlab-ci 中运行 docker 命令?
- java - 两个 m×n 数组的 Spearman 相关性(使用 Apache Commons Math)
- javascript - UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“发送”
- python - 热图回调函数
- swift - 如何将 Swift 字典连接到 Firestore 地图字段
- python - 在 python 代码中添加到数据库时如何修复错误?
- python - 如何在 python 解释器中打印希伯来语输出?
- python - 嗨,你能帮我使用 Python 3.8 将具有多个值的 json 响应导入到 postgres db