SwiftUI 在开关中填充视图

SwiftUI fill a View inside a switch

有谁知道执行以下操作的正确方法:

我有一个生成路径的视图,我想用颜色或渐变(它们是不同的类型)填充它。

为此,我有一个从父视图传递给视图的枚举:

enum FillColor {
  case color(_ color: Color)
  case gradient(color1: Color, color2: Color)
}

在视图中,我有一条路径:

 var body: some View {
   GeometryReader { geometry in
     Path { path in
     ...
     }
   }   
}

然后我需要切换并执行以下操作:

switch color {
  case .color(let c):
    path.fill(c)
  case .gradient(let c1, let c2):
    let gradient = ...
    path.fill(gradient)
}

我是否为 Path 创建一个变量? 但我也需要使用 GeometryReader

所以我所做的是将创建路径封装到一个函数中,然后使用它来避免代码重复。
我将路径作为 inout 参数传递,以便能够对其进行变异。
当然这不是理想的解决方案..

GeometryReader { geometry in
  switch color {
  case .color(let c):
    Path { path in createPath(&path, geometry: geometry) }
    .fill(c)
  case .gradient(let c1, let c2):
    let gradient = LinearGradient(...)
    Path { path in createPath(&path, geometry: geometry) }
    .fill(gradient)
  }
}