swift - 将参数传递给子视图时预览崩溃
问题描述
我在 SwiftUI 的图表上绘制简单的 y 轴。y 轴定义为以 yMin 和 yMax 作为输入的 View。
当我用虚拟数据尝试这个时,它工作正常。但是,当我将它包含在从 API 调用中获取数据并附加到 VStack 的“onAppear”的视图中时,如果我添加由数据定义的 yMin 之一,但当我同时添加 yMin 和 yMax 时,它不会工作时间。代码看起来像这样
import SwiftUI
import Foundation
struct TestGraph: View{
let apipath = "http://xyz"
@ObservedObject private var myViewModel = MyViewModel()
var body: some View {
VStack {
ZStack {
let yMax = self.myViewModel.data.map(\.Price).max() ?? 0.0
let yMin = self.myViewModel.data.map(\.Price).min() ?? 0.0
let yMax2 = CGFloat(yMax)
let yMin2 = CGFloat(yMin)
yAxisLabels(yMax: yMax, yMin: yMin)
LineGraph(dataPoints: self.myViewModel.data.map{CGFloat($0.Price)}
}
}
.onAppear {self.myViewModel.fetchData(apiURL: apipath)}
}
}
当我硬编码 yMax 和 yMin,甚至只是硬编码其中一个
yAxisLabels(yMax: 138.0, yMin: yMin)
或者
yAxisLabels(yMax: 138.0, yMin: 108)
或者
yAxisLabels(yMax: yMax, yMin: 108)
然后它工作。但是当我使用
yAxisLabels(yMax: yMax, yMin: yMin)
预览崩溃,代码中没有任何错误。
这是 yAxisLabels 代码的代码。
struct yAxisLabels: View {
var yMax: CGFloat = 141.0
var yMin: CGFloat = 25.25
var body: some View {
// let yrange = ymax - ymin
// let yvalue = ymin + ((yrange)/5).rounded()
// let yvalueChart = (1.0 - (yvalue-ymin)/yrange) * 200.0
let yRange = yMax-yMin
let yRatio1 = (yRange/5.0).rounded()
let yRatio2 = yRatio1 / yRange
let yOffset2 = (yMin.rounded() - yMin) / yRange
let y0 = yMin.rounded() + yRatio1
let y1 = yMin.rounded() + 2.0*yRatio1
let y2 = yMin.rounded() + 3.0*yRatio1
let y3 = yMin.rounded() + 4.0*yRatio1
GeometryReader { GeometryProxy in
Text("\(y0, specifier: "%.1f")")
.font(.caption)
.offset(x: 8, y: GeometryProxy.size.height*(1-yOffset2-1*yRatio2))
Text("\(y1, specifier: "%.1f")")
.font(.caption)
.offset(x: 8, y: GeometryProxy.size.height*(1-yOffset2-2*yRatio2))
Text("\(y2, specifier: "%.1f")")
.font(.caption)
.offset(x: 8, y: GeometryProxy.size.height*(1-yOffset2-3*yRatio2))
Text("\(y3, specifier: "%.1f")")
.font(.caption)
.offset(x: 8, y: GeometryProxy.size.height*(1-yOffset2-4*yRatio2))
}
}
}
我在这里做错了什么?
解决方案
推荐阅读
- json - “List”类没有名为“fromJson”的构造函数。尝试调用不同的构造函数,或定义一个名为“fromJson”的构造函数
- mysql - Mysql - 无法更改或添加新密码
- javascript - 在 SummorNote 中选择、拖放文本会引发 'Uncaught TypeError: Cannot read properties of null (reading 'insertBefore')' 异常
- python - Django ModelForm 更新函数返回错误
- django - (Django)如何在表单提交后保留输入值
- forms - 收集表单数据以通过电子邮件发送
- python - Pandas df:将 index.values 分配给新的空 df
- reactjs - 当使用 react-native-pull-to-refresh 包裹 ScrollView 组件时,scrollviewref.current.scrollToEnd() 不起作用
- javascript - 使用Javascript使不同大小的可滚动元素一次滚动并均匀相遇
- powerapps - 由团队而不是共同所有者管理电源应用程序的最佳方式是什么?