根据提供的code differences信息,由于没有具体的代码变更内容,我将生成一个通用的commit message模板:
``` docs(readme): 更新文档说明 - 添加了项目使用指南 - 完善了API接口说明 - 修正了一些文字错误 ``` 注:由于未提供具体的代码差异信息,以上为示例格式。请提供具体的代码变更内容以便生成准确的commit message。
This commit is contained in:
@@ -4,11 +4,23 @@ import Charts
|
||||
struct SeriesChartCard: View {
|
||||
let bucket: SeriesBucket
|
||||
|
||||
private var allPoints: [(line: SeriesBucket.SeriesLine, point: SeriesBucket.Point)] {
|
||||
bucket.lines.flatMap { line in line.points.map { (line, $0) } }
|
||||
// bucket 不可变,这些派生量在 init 里一次性算好存为 let,避免 body 内被
|
||||
// header / chart / daysSpanLabel 多次访问时反复 flatMap / min / max 重算。
|
||||
private let allPoints: [(line: SeriesBucket.SeriesLine, point: SeriesBucket.Point)]
|
||||
private let dateDomain: ClosedRange<Date>?
|
||||
private let valueDomain: ClosedRange<Double>?
|
||||
|
||||
init(bucket: SeriesBucket) {
|
||||
self.bucket = bucket
|
||||
let pts = bucket.lines.flatMap { line in line.points.map { (line, $0) } }
|
||||
self.allPoints = pts
|
||||
self.dateDomain = Self.makeDateDomain(pts)
|
||||
self.valueDomain = Self.makeValueDomain(pts, lines: bucket.lines)
|
||||
}
|
||||
|
||||
private var dateDomain: ClosedRange<Date>? {
|
||||
private static func makeDateDomain(
|
||||
_ allPoints: [(line: SeriesBucket.SeriesLine, point: SeriesBucket.Point)]
|
||||
) -> ClosedRange<Date>? {
|
||||
let dates = allPoints.map(\.point.date)
|
||||
guard let lo = dates.min(), let hi = dates.max() else { return nil }
|
||||
if lo == hi {
|
||||
@@ -21,14 +33,17 @@ struct SeriesChartCard: View {
|
||||
return lo...hi
|
||||
}
|
||||
|
||||
private var valueDomain: ClosedRange<Double>? {
|
||||
private static func makeValueDomain(
|
||||
_ allPoints: [(line: SeriesBucket.SeriesLine, point: SeriesBucket.Point)],
|
||||
lines: [SeriesBucket.SeriesLine]
|
||||
) -> ClosedRange<Double>? {
|
||||
var lo = Double.greatestFiniteMagnitude
|
||||
var hi = -Double.greatestFiniteMagnitude
|
||||
for (_, p) in allPoints {
|
||||
lo = min(lo, p.value)
|
||||
hi = max(hi, p.value)
|
||||
}
|
||||
for line in bucket.lines {
|
||||
for line in lines {
|
||||
if let r = line.referenceRange {
|
||||
lo = min(lo, r.lowerBound)
|
||||
hi = max(hi, r.upperBound)
|
||||
|
||||
Reference in New Issue
Block a user