如何使 CareKitUI 条形图与 SwiftUI 兼容

How to make CareKitUI Bar Charts compatible with SwiftUI

目前,使用 SwiftUI 对 CareKit 的支持有限。

我理解,一般来说,使对象符合 UIViewRepresentable 的想法,但我正在努力了解它在实践中的工作方式。

以下是来自 readme 的示例代码:

let chartView = OCKCartesianChartView(type: .bar)

chartView.headerView.titleLabel.text = "Doxylamine"

chartView.graphView.dataSeries = [
    OCKDataSeries(values: [0, 1, 1, 2, 3, 3, 2], title: "Doxylamine")
]

因此 init(type)headerView.titleLabelgraphView.dataSeries 需要在符合 UIViewRepresentable 的结构中设置为 @Binding 变量,但我'我正在努力弄清楚如何使用以下两个函数:

func makeUIView() {}

func updateUIView() {}

如有任何帮助,我们将不胜感激。

实际上只有数据需要绑定,因为类型是初始化的一部分,标题几乎不可能改变,所以这里是可能的变体

struct CartesianChartView: UIViewRepresentable {
    var title: String
    var type: OCKCartesianGraphView.PlotType = .bar
    @Binding var data: [OCKDataSeries]

    func makeUIView(context: Context) -> OCKCartesianChartView {
        let chartView = OCKCartesianChartView(type: type)

        chartView.headerView.titleLabel.text = title
        chartView.graphView.dataSeries = data

        return chartView
    }

    func updateUIView(_ uiView: OCKCartesianChartView, context: Context) {
        // will be called when bound data changed, so update internal 
        // graph here when external dataset changed
        uiView.graphView.dataSeries = data
    }
}