gpt4 book ai didi

swift - 如何将字典的值绑定(bind)到 SwiftUI 控件?

转载 作者:行者123 更新时间:2023-12-04 00:21:19 28 4
gpt4 key购买 nike

我有一个 class DataPoint,它是字典的值。

DataPoint 有一个成员变量 value,我需要将其绑定(bind)到 SwiftUI 中的 Slider

我将数据 class AppData 作为 @Environment Object 提供给 SwiftUI,字典包含 class DataPoint 的实例。

我未能设法将 DataPoint.value 成员变量绑定(bind)到 SwiftUI Slider 值。

这些是相关的代码片段。

@Published 数据:

class AppData: ObservableObject {
@Published var dataPoints: [UUID : DataPoint] = [:] {
...
}

数据结构:

class DataPoint: Identifiable {
var id = UUID()
var value: Double
}

DataPoints AppDataList 的 SwiftUI View :

struct AppDataList: View {
@EnvironmentObject var appData: AppData

var body: some View {
NavigationView {
List(Array(appData.dataPoints.values)) { dataPoint in
NavigationLink(destination: DataPointDetail(dataPointID: dataPoint.id)) {
Text("\(dataPoint.value)")
}
}
...
}

我遇到的 SwiftUI DataPointDetail View ,它引用自 AppDataList:

struct DataPointDetail: View {
@EnvironmentObject var appData: AppData
var dataPointID: UUID

var body: some View {
HStack(alignment: .top) {
VStack(alignment: .leading) {
Text("Data Point Detail")
Text("\(appData.dataPoints[dataPointID]!.value)")
/* This line */
/* troubles */
/* me! */
/* ---> */ Slider(value: appData.dataPoints[dataPointID]?.value, in: 0...10000)
Spacer()
Text("\(appData.dataPoints[dataPointID]!.id)")
}
}
}
}

根内容 View :

struct ContentView: View {
@EnvironmentObject var appData: AppData

var body: some View {
VStack {
if appData.dataPoints.count > 0 {
AppDataList()
} else {
NoDataPoints()
}
}
}
}

在 SceneDelegate 中创建根内容 View :

        let contentView = ContentView()
.environmentObject(appData)

我在编辑器中收到错误消息:静态成员“leading”不能用于类型为“Horizo​​ntalAlignment”的实例,它在 DataPointDetail View 中的 VStack 行中。我相信它与 VStack 无关。

Static member 'leading' cannot be used on instance of type 'HorizontalAlignment'

注释掉 Slider 行会生成可编译和可运行的代码。

如何做到这一点?

最佳答案

最快速的解决方案是使用包装绑定(bind),如下图所示

Slider(value: Binding<Double>(
get: { self.appData.dataPoints[self.dataPointID]?.value ?? 0 },
set: { self.appData.dataPoints[self.dataPointID]?.value = $0}), in: 0...10000)

关于swift - 如何将字典的值绑定(bind)到 SwiftUI 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60487927/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com