1

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

我通常理解使对象符合 的想法UIViewRepresentable,但我正在努力了解这在实践中的工作方式。

以下是自述文件中的示例代码:

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需要设置为@Binding结构中的变量UIViewRepresentable,但我正在努力弄清楚我必须如何使用以下两个函数:

func makeUIView() {}

func updateUIView() {}

任何帮助将非常感激。

4

1 回答 1

1

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

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
    }
}
于 2020-10-03T05:02:36.523 回答