作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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”不能用于类型为“HorizontalAlignment”的实例
,它在 DataPointDetail View 中的 VStack 行中。我相信它与 VStack 无关。
注释掉 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/
我是一名优秀的程序员,十分优秀!